使java中新生成的文件在编写时无法读取

使java中新生成的文件在编写时无法读取,java,linux,permissions,Java,Linux,Permissions,您好,我正在使用java中的File类编写一个包含100000多行信息的txt文件。我在FedoraLinux上。在写入文件时,我不希望在完全完成之前允许读取该文件 我认为在写入文件之前设置setReadable(false),然后在最后将其设置为true会起作用,但没有人知道我如何正确地做到这一点 谢谢。使用.tmp扩展名编写,完成后将其移动/重命名为真正的扩展名 final File file = new File(filename + ".tmp"); // code to save t

您好,我正在使用java中的File类编写一个包含100000多行信息的txt文件。我在FedoraLinux上。在写入文件时,我不希望在完全完成之前允许读取该文件

我认为在写入文件之前设置setReadable(false),然后在最后将其设置为true会起作用,但没有人知道我如何正确地做到这一点


谢谢。

使用.tmp扩展名编写,完成后将其移动/重命名为真正的扩展名

final File file = new File(filename + ".tmp");

// code to save the text to the file

file.renameTo(new File(filename+ ".txt")) 

.renameTo是linux上的一个原子操作。

您应该使用实现它。它允许您在单个事务中写入文件。在提交基础文件之前,它甚至不存在


但你也可以单独做。将文件写入其他位置,完成后将其移动

也许这有帮助:重命名在Windows上不是原子的,请参见:@lbalazscs他在问题中提到fedora linux,这是原子的。这不会阻止进程写入文件。filename+“.tmp”仍然可由任何进程写入。JavaNIO包具有文件锁定。