2013-10-17 3 views
1

ArrayList의 요소를 텍스트 문서에 쓰려고합니다.BufferedWriter가 전체 파일을 쓰지 않습니다 - 일부만

Path file = Paths.get("(filepath)"); 
    BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("US-ASCII")); 
    for (int j = 0; j < 100000; j++) { 
     writer.write(Integer.toString(radicalsAndPositions.get(j).get(0)) + "," + Integer.toString(radicalsAndPositions.get(j).get(1)) + " , " + "\n"); 
    } 

ArrayList에이 100,000 요소까지 전체이며, 파일을 생성하지만 끝에서 값이 골대를 벗어났습니다 : 내 BufferedWriter의 코드는 (실제 파일 경로로)은 다음과 같다. 'j'를 10,000으로 제한하면 처음으로 생성 된 9170 개의 행만 가져옵니다. 전체 100,000으로, 나는 처음 99250 라인 만 얻는다.

'j'를 1000으로 제한하면 빈 파일이 생성됩니다.

문서가 올바르게 생성 중입니다. 올바른 요소를 사용하여 문서가 너무 일찍 끝납니다. 왜 그런가요? 어떻게 고칠 수 있습니까?

답변

3

의 BufferedWriter 객체를 파일로 작성 후 writer.flush() 물품. 당신이 BufferedWriter의 객체를 종료하지 않는 한

writer.close();

그것은 당신의 파일을 작성하지 않습니다.

+0

이유가 있습니까? 끝나지 않고는 부분적으로 만 씁니다. – Useablelobster

+1

BufferedWrite의 개념은 버퍼링하는 것입니다. 버퍼가 가득 차면 플러시되어 별도의 IO 작동 횟수가 줄어 듭니다. 또한 플러시를 호출 할 때 및 작성자를 닫을 때 플러시됩니다. – Thomas

+1

네, 분명히 이유가 있습니다. 파일을 쓰고있는 현재 스트림을 닫습니다. 파일에서 변경 한 내용을 반영하려면 파일을 닫아야합니다. 또한 스트림을 플러시합니다. – Prasad

3

완료되면 버퍼링 된 작성기를 닫아 버퍼가 플러시되었는지 확인하십시오.

2

또한 닫기

writer.close() is also a good choice 
+2

'close()'를 호출하면 충분합니다. http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#close%28%29 – divadpoc