在创建文件时使用BufferedWriter.write()吗?
我从文档中知道,当填充缓冲区时,它将刷新到文件,这是否意味着:
每次填充缓冲区时,我的文件系统上都会出现一个不完整的文件?
或该文件仅在BufferedWriter关闭时创建?
我担心的是我使用BufferedWriter将文件写入目录,另一个进程正在查询目录中的新文件并读取它们。我不希望创建一个不完整的文件,并由其他进程读取。
答案 0 :(得分:3)
在创建文件时使用BufferedWriter.write()吗?
从不。 BufferedWriter
本身只是写入另一个Writer
。现在,如果您使用FileOutputStream
或FileWriter
(第一个可能包含在OutputStreamWriter
中),则创建文件(如果已存在,则打开以进行写入)你构造了这个对象,即在你真正写出任何数据之前。
我担心的是我使用BufferedWriter将文件写入目录,另一个进程正在查询目录中的新文件并读取它们。我不希望创建一个不完整的文件,并由其他进程读取。
处理此问题的一种典型方法是写入暂存区域,然后将文件重命名为正确的位置,这通常是原子操作。或者甚至将文件写入正确的目录,但是使用文件扩展名,轮询过程不会发现 - 然后将文件重命名为最终文件名。
答案 1 :(得分:1)
BufferedWriter
不会像Jon Skeet所说的那样创建文件。而且,当您将其写入磁盘时,您无法保证其他进程不会读取不完整的文件。但是你可以做两件事: