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