2017-02-01 8 views
0

Мне нужно прочитать данные из одного файла и записать его в другом файле в обратном порядке и в нижнем регистре.Почему файл не заполняется, если я не закрываю поток?

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' также очистит поток, который необходим. См. [Doc] (https://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html#close--) –

+0

Это то, что вы запрашиваете явно, когда вы запрашиваете * буферизированный * писатель. – Holger

ответ

2

Вы подключаете выход через BufferedWriter. Выход BufferedWriter буферы, держа его в памяти, пока один из этих условий:

  • буфер записи заполнен
  • flush называется
  • Автор закрыт

Когда один из них возникают ситуации, BufferedWriter будет записывать буферные данные в базовый носитель (в вашем случае файл).

2

Потому что у вас есть все строки во внутреннем буфере, который не сбрасывается, потому что функция close() не вызывается.

Смежные вопросы