1

我有一个要求,我将文件写入服务器。另一个应用程序有一个预定的作业,它以特定的时间间隔读取文件。在我的写入完成之前,该文件不应该是可读的。我试过使用

File.isReadable(false)

但这不起作用。如果我仍在写入,调度程序正在从文件中提取不完整的数据。

任何解决方案?

4

4 回答 4

4

写入不同的文件名,然后在写入完成后将文件重命名为调度程序期望的名称。如果您在 Linux 或类似系统上运行,则同一文件系统中的文件重命名是原子的。

File tempFile = new File("/path/to/file.tmp");
// write to tempFile
tempFile.renameTo(new File("/path/to/file"));
于 2013-05-29T12:14:04.917 回答
3

您可以使用另一个与标记同名的文件。您将开始写入FileName.txt,完成后,创建文件FileName.rdy
并且您的应用程序将仅检查 *.rdy 文件,如果找到 - 读取 FileName.txt。

于 2013-05-29T12:15:59.823 回答
1

您可以使用FileLock API。

我在这里简要解释了它是如何工作的。

于 2013-05-29T12:13:41.993 回答
0

更好的选择是同步读写过程......

将您的代码放入同步 {} 块中读取文件和写入文件....这样可以等到其他完成

于 2013-05-29T12:16:48.087 回答