2014-12-11 7 views
9

파일이 존재하지 않음을 나타내는 또 다른 Java 예외가 있음을 발견했습니다 - NoSuchFileException. 나는 differen 메서드에서 두 가지 모두를 던져 특정 API를 리팩터링 할 수있는 작업을하고 그냥 하나를 사용하고 싶습니다.FileNotFoundException 대 ​​NoSuchFileException 대 ​​

NoSuchFileExceptionFileNotFoundException에 매핑해야합니까? 좀 더 구체적이기 때문에 FileNotFoudnException 대신 NoSuchFileException을 사용해야합니까?

편집 : 질문이 업데이트되었습니다. 이 질문을 게시하기 전에 설명서를 읽고 기본 차이점을 알아야합니다. 유형별 예외 처리가 서비스 api 클라이언트에게 중요하기 때문에이 경우 추가 정보와 지침이 필요하므로 두 예외 유형 모두에 대해 확인 작업을 수행해야하는 경우를 피하고 싶습니다.

+2

사양을 읽었습니까? –

+1

Java 7 예외 NoSuchFileException은 요청 된 파일이없는 경우에만 사용됩니다. 이전 버전의 FileNotFoundException이 사용되었으며 파일이 존재하지만 어떤 이유로 액세스 할 수없는 경우에도 사용되었습니다. –

+0

하나는 File 클래스와 함께 사용됩니다. 다른 하나는 Path 클래스와 함께 사용하기위한 것입니다. 그들의 꾸러미가 그 사실을 명확하게 보여줘야합니다. 이러한 예외 중 하나를 포기해서는 안됩니다. 파일을 읽으려고 시도하기 전에 파일의 존재/가독성을 확인해야합니다. – VGR

답변

4

NoSuchFileException과 달리 FileNotFoundException은 파일이 존재하지 않는다고해서 반드시 액세스 할 수 없다는 의미입니다. 그것과는 별개로 나는 네가 어떻게 다른지 모르겠다. 지정된 패스 명으로 나타나는 파일이 열리지 않았던 것을

6

FileNotFoundException

신호. 지정된 경로명을 가진 파일이 존재하지 않으면 FileInputStream, FileOutputStreamRandomAccessFile 생성자가이 예외를 throw합니다. 파일이 존재하지만 어떤 이유로 쓰기가 가능한 읽기 전용 파일을 열려고 시도 할 때에 액세스 할 수없는 경우에도 이러한 생성자가 throw합니다.

NoSuchFileException

체크 예외 시도가 존재하지 않는 파일에 액세스하려고 할 때 발생합니다.

설명서는 자체 설명입니다.

+1

그것은 그것을 명확하게 preety했다. FileNotFound는 FileNotAccesible이거나 뭔가 있어야합니다. Java 7에서이 문제를 해결하려고 시도한 것 같습니다. FileNotFound를 제거 할 수 없으며 Java 9 일 수도 있습니다. – Panther

+0

FileReader의 생성자는 예외의 javadoc에 언급되어 있지 않지만 FileNotFoundException을 던져 버리기 때문에 FileNotFoundException에 대한 javadoc과 같이 보입니다. –

3

IMHO,이 두 가지 예외의 의미에는 미묘한 차이가 있습니다. NoSuchFileException은 일반적으로 예상 위치에 파일이없는 경우에 사용되며 FileNotFoundException도이 경우에 사용되지만 파일은 있지만 액세스 할 수없는 경우에도 사용됩니다. 자바 7에 도입 된 NoSuchFileException

0

NoSuchFileException 자바 1.6 이상 일반 및 호환으로 (권한 문제 등)

또한은, 따라서 특정 작업을 위해, 나는 FileNoteFoundException에 충실 것 참고 새로운 (1.7 현재) FileSystemException 서브 클래스 IOException을 확장하는 반면에 FileNotFoundExceptionIOException의 직접 서브 클래스입니다. 새로운 부모 클래스 인 FileSystemException은 가능한 한 완전해야하므로 중복성이 있어도 NoSuchFileException을 추가해야합니다. NotDirectoryExceptionAccessDeniedException 하위 클래스는 몇 가지 가능성을 하나의 구별 할 수없는 덩어리로 남기지 않고 이전 기능을 멋지게 마무리합니다.