我有一个要求,我在哪里写一个文件到服务器。另一个应用程序具有预定作业,该作业以特定间隔读取文件。在我写完成之前,该文件不应该是可读的。我尝试过使用
File.isReadable(false)
但这不起作用。如果我还在写文件,调度程序会从文件中获取不完整的数据。
任何解决方案?
答案 0 :(得分:4)
写入不同的文件名,然后在写入完成时将文件重命名为调度程序所需的名称。如果您在Linux或类似系统上运行,那么同一文件系统中的文件重命名将是原子的。
File tempFile = new File("/path/to/file.tmp");
// write to tempFile
tempFile.renameTo(new File("/path/to/file"));
答案 1 :(得分:2)
您可以使用与标记同名的其他文件。您将开始写入FileName.txt
,完成后,创建文件FileName.rdy
并且您的应用程序将仅检查* .rdy文件(如果找到) - 请阅读FileName.txt。
答案 2 :(得分:1)
答案 3 :(得分:0)
更好的选择是同步读写程序......
将您的代码放入读取文件并在同步的{}块中写入文件....这样可以等到其他完成