2012-03-23 2 views
0

안녕하세요 저는 버퍼 된 리더를 사용하여 텍스트 파일을 읽고 텍스트 파일의 줄 수를 인쇄하려고했습니다. 내 코드는 내가 이것을 실행하면 목록 라인 0 요소가 있다고java 오류로 파일 읽기

File parent = new File("/Desktop/Test Folder"); 
File text = new File(parent, "/text.txt"); 
FileWriter fw; 
FileReader fr; 
BufferedWriter write; 
BufferedReader read; 
if (!parent.exists()) { 
     parent.mkdir(); 
    } 
    try { 
     text.createNewFile(); 
    } catch (Exception ex) { 
     System.err.println("Error creating file"); 
    } 
    try { 
     fw = new FileWriter(text); 
     fr = new FileReader(text); 
     write = new BufferedWriter(fw); 
     read = new BufferedReader(fr); 
    } catch (Exception ex) { 
     System.err.println("Error trying to write or read file"); 
    } 
    System.out.println("Writing to file..."); 
try { 
     write.write("String number one.\n"); 
     write.write("String number two.\n"); 
     List<String> lines = new LinkedList<String>(); 
     String line = read.readLine(); 
     while (line != null) { 
      lines.add(line); 
      line = read.readLine(); 
     } 
     System.out.printf("Number of lines is %d.\n", lines.size()); 
     write.flush(); 
     write.close(); 
    } catch (Exception ex) { 
     System.err.println("Error writing to file"); 
    } 

... 이런 식으로 간다. 어떤 도움이 필요합니까? 나는 어딘가에서 쓸모없는 실수를 했습니까? 아니면 잘못된 방법을 사용하고 있습니까? 나는 아마추어이므로 오류가 확실한 것으로 의심됩니다. 어쨌든, 누군가 나에게 도움을 줄 수 있습니까?

+0

출력을 파일에서 읽기 전에 flush()해야합니다. –

답변

1

보다 먼저 writer.flush(); 전화를 연결하려고 시도 했습니까? documentationWriter.flush()의에서

:

세척 스트림. 스트림이 여러 기록에서 모든 문자() 버퍼의 메소드를 저장 한 경우, 의도 한 대상이 비어있을 수 있습니다 파일을 세척하기 전에 읽고 그렇다면

에 즉시 쓰기!

+0

감사합니다. 문제가 –

0

실제 읽기 전에 Writer의 flush() 및 close()를 넣어야합니다. 당신이하려는 것은 파일을 파이프로 사용하는 것입니다. 그건 네가하고 싶은게 아니야.

+0

입니다. close()는 flush()를 호출하므로 close() 만 필요합니다. http://docs.oracle.com/javase/6/docs/api/java/io/OutputStreamWriter.html#close() – Adam