2017-12-02 8 views
2

.txt 파일에서 정보를 읽으려는 BufferedReader를 선언하려고합니다. 나는 다음과 같은 방법으로 선언 :BufferedReader는 catch-22를 입력하지 않고 파일을 여는 것으로 선언 할 수 없습니다.

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("input-file.txt")))); 

을 지금, try/catch 블록에서 선언하지 않는 경우 자바 불만 때문에 나는이있는 작은 문제가 - 결국, 보장 시스템이 없다 입력 파일을 찾을 것이므로 모든 IOException을 잡아낼 필요가 있습니다. 하지만 try-catch 블록에 선언을 넣으면 Java ALSO가 불평합니다. 나중에 .brbl() 메서드를 사용하여 br를 참조하고 br는 try/catch 블록에서 선언되었으므로 BufferedReader가 생성된다는 보장이 없습니다. 하지만 try/catch 블록에서 BufferedReader를 제거하여 IOException을 잡을 수 없다면 ...이 함정에서 어떻게 벗어나나요?

+1

나는 여러분이 말하는 catch-22를 이해하지 못합니다. 전에 문제없이 독자 스트림을 만들었습니다. catch-22를 만들 것이라고 느끼는 정확한 코드를 게시하거나 가능한 한 가까이에 게시 할 수 있습니까? 그렇지 않으면 실제 문제가 무엇인지 추측 할 수 있습니다. – yshavit

+1

@yshavit와 동의하십시오 ... 코드를 보지 않고서는 정확한 문제가 무엇인지 명확하지 않습니다. 또한 "Java 불평"을 말하지 마십시오. Java는 불평하지 않습니다. 오류가 무엇인지에 대한 구체적인 정보를 제공합니다.이 정보는 귀하가 우리와 공유해야하는 정보입니다. – ajb

답변

3

당신은 try-catch 블록 중 (안)의 BufferedReader에서 읽을 수 있습니다 :

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("input-file.txt"))))) { 
    String s = br.readLine(); 
} catch (IOException io) {} 
+0

그는 자신의 질문에 이미 try-catch 블록에서 시도했다고 말했습니다. – Meepo

+0

그는 단지 BufferedReader 인스턴스를 선언하려고 시도했지만 – Ivan

+0

아는 사용하지 않았습니다. 그렇다면 올바른 것입니다. 내 잘못이야 – Meepo

0

내가 작업하는/O 자원 java compiler 힘 당신이 손 전에 발생할 수있는 예기치 않은 오류를 처리 할 수. Java에서 checked exception이라고하며이를 피할 방법이 없습니다. 당신이 파일을 읽고 싶다면, 당신은 다음과 같이 작업을 수행 할 수 있습니다

new FileReader("input-file.txt"); 

이이 FileNotFoundException을 던져 이러한 파일없고이 checked exception하고 컴파일러 힘은 당신이 컴파일시에이를 처리 할 경우.

BufferedReader reader = new BufferedReader(new FileReader("input-file.txt")); 

BufferedReaderAutoCloseable 인터페이스를 구현하면 다음과 try-with-resources 성명에서 try 내에서 선언 할 수 있습니다 : 당신은 BufferedReader 내에서 장식 할 수

try (BufferedReader reader = new BufferedReader(new FileReader("input-file.txt"))) { ... } 

컴파일러는 FileNotFoundExceptionIOException을 처리하도록 강요합니다. try 블록의 실행이 완료되면 close 메서드가 자동으로 호출되며 해당 메서드는 IOException을 던질 수 있습니다. 따라서이 문제도 처리해야합니다. 따라서 전체 버전은 다음과 같이 보일 수 있습니다.

try (BufferedReader reader = new BufferedReader(new FileReader("input-file.txt"))) { 
    // your logic 

} catch (FileNotFoundException e) { 
    e.printStackTrace(); 

} catch (IOException e) { 
    e.printStackTrace(); 
}