2017-02-01 2 views
0

私は1つのファイルからデータを読んで、それを逆順で小文字で他のファイルに書き込む必要があります。ストリームを閉じないとファイルが埋められないのはなぜですか?

BufferedReader r = new BufferedReader(new FileReader("file.txt")); 
List<String> s = new LinkedList<>(); 
String temp; 
while ((temp = r.readLine()) != null) 
    s.add(temp); 
r.close(); 
BufferedWriter w = new BufferedWriter(new FileWriter("file1.txt")); 
ListIterator<String> li = s.listIterator(s.size()); 
while (li.hasPrevious()) { 
    w.write(li.previous().toLowerCase() + "\n"); 
} 
// w.close(); 

最後の文字列にコメントすると、ファイルは空のままです。そうしないと、ファイルは正しく埋められます。なぜそれが起こるのか教えてください。

+1

'close'を呼び出すと、必要なストリームもフラッシュされます。 [the doc](https://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html#close--) –

+0

を参照してください。バッファされた*ライター。 – Holger

答えて

2

出力をBufferedWriterで連鎖しています。これらの条件のうちの1つまでメモリにそれを維持BufferedWriterバッファ出力は、発生:

  • ライト・バッファと呼ばれるフル
  • flushある
  • ライターは閉じられ

これらの1条件が発生すると、BufferedWriterはバッファされたデータを基礎となるメディア(あなたの場合はファイル)に書き込みます。

2

内部バッファにすべての行があるため、close()が呼び出されないためフラッシュされません。

関連する問題