如果我不关闭流,为什么文件无法填写?

时间:2017-02-01 16:01:01

标签: java io stream writer

我必须从一个文件中读取数据,然后以相反的顺序和小写将其写入其他文件中。

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();

如果我评论最后一个字符串,该文件将保持为空;否则文件将被正确填写。你能解释一下为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

因为所有行都在内部缓冲区中结束,因为没有调用close()而没有刷新内存缓冲区。

答案 1 :(得分:2)

您正在通过BufferedWriter链接输出。 BufferedWriter缓冲区输出,将其保留在内存中,直到出现以下情况之一:

  • 写缓冲区已满
  • flush被称为
  • 作家已关闭

当出现这些情况之一时,BufferedWriter会将缓冲的数据写入基础媒体(在您的情况下是文件)。