BufferedWriter何时创建文件?

时间:2013-11-20 11:40:31

标签: java file bufferedwriter

在创建文件时使用BufferedWriter.write()吗?

我从文档中知道,当填充缓冲区时,它将刷新到文件,这是否意味着:

每次填充缓冲区时,我的文件系统上都会出现一个不完整的文件?

或该文件仅在BufferedWriter关闭时创建?

我担心的是我使用BufferedWriter将文件写入目录,另一个进程正在查询目录中的新文件并读取它们。我不希望创建一个不完整的文件,并由其他进程读取。

2 个答案:

答案 0 :(得分:3)

  

在创建文件时使用BufferedWriter.write()吗?

从不。 BufferedWriter本身只是写入另一个Writer。现在,如果您使用FileOutputStreamFileWriter(第一个可能包含在OutputStreamWriter中),则创建文件(如果已存在,则打开以进行写入)你构造了这个对象,即在你真正写出任何数据之前。

  

我担心的是我使用BufferedWriter将文件写入目录,另一个进程正在查询目录中的新文件并读取它们。我不希望创建一个不完整的文件,并由其他进程读取。

处理此问题的一种典型方法是写入暂存区域,然后将文件重命名为正确的位置,这通常是原子操作。或者甚至将文件写入正确的目录,但是使用文件扩展名,轮询过程不会发现 - 然后将文件重命名为最终文件名。

答案 1 :(得分:1)

BufferedWriter不会像Jon Skeet所说的那样创建文件。而且,当您将其写入磁盘时,您无法保证其他进程不会读取不完整的文件。但是你可以做两件事:

  1. 锁定文件,以便其他进程在写入完成之前无法读取它。关于此站点上的Java文件锁定有几个问题(搜索“[java] lock file”)。
  2. 使用其他文件名创建文件(即使用其他进程未查找的扩展名),并在写完成后重命名。