2013-02-19 3 views
3

마지막 줄에 아무 것도 포함되어 있지 않지만 null을 반환하지 않습니다. 이 파일의 끝에 도달 할 때 내가 BufferedReader.readLineBufferedReader가 마지막 줄에서 null을 반환하지 않습니다.

BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
while ((line = br.readLine()) != null) { 
    // process the line. 
} 
br.close(); 
+1

파일의 마지막 줄 끝에 줄 바꿈이 있습니까? – jlordo

+1

Java SE 7을 사용하는 경우 새로운 자동 리소스 관리 기능을 사용하여 스트림을 관리하십시오. – Puce

+0

[javadoc] (http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine())을 읽어보십시오. –

답변

4

을 발생하지 않도록 어떻게 Eclipse를 사용하여 디버깅 할 때, 내가 디버그 모드에서 line= "" 보았다

을 다음과 같이 코드는() 메소드는 null를 돌려줍니다 .

프로그램이 파일의 끝에 도달하기 전에 파일의 행을 읽는 것 같습니다. 종료 조건은 행이 널 (null)이고 빈 문자열이 널 (null)이 아니므로 루프가 종료되고 종료되지 않습니다.

+1

OP가이를 실현한다고 생각합니다. 답은 'null'이 반환되지 않는 이유 (즉, 파일 끝에 빈 줄이 있기 때문에)를 설명해야합니다. –

+0

@DuncanJones 편집 내 대답. 감사합니다 –

2

줄이 한 줄 바꿈으로 구성된 경우 line은 비어 있습니다. String이지만 readLine은 null을 반환하지 않습니다. readLine은 파일 끝에 도달하면 null을 반환합니다.

6

발생하지 않도록주의하십시오. 빈 줄은 줄이므로 그대로 반환됩니다.

은 당신이 할 수있는 라인이 처리하기 전에 비어 있는지 확인하는 없습니다 :

BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
while ((line = br.readLine()) != null) { 
    if (!line.isEmpty()) { 
     // process the line. 
    } 
} 
br.close(); 
+0

정확히 똑같은 대답을 쓰고 있었다. +1 – aglassman

+1

기본적으로 정답이지만 원래 게시물과 동일한 문제가 있습니다. 새로운 자동 리소스 관리 기능을 사용하여 스트림을 관리하거나 finally 블록에서 스트림을 올바르게 닫습니다. – Puce

2

nulll = 아무것도. ""= 비어 있습니다. 마지막 줄이 비어 있으면 ""예상됩니다. 다음 행은 null이어야합니다.

거기에서 당신은 emptyness (나는 appache StringUtils isEmpty를 좋아한다)를 테스트하거나 처리하기 전에 파일에서 마지막 \ n을 제거 할 수 있습니다.

관련 문제