在写完成之前拒绝读取文件的访问权限 - java

时间:2013-05-29 12:11:28

标签: java file-io

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

File.isReadable(false)

但这不起作用。如果我还在写文件,调度程序会从文件中获取不完整的数据。

任何解决方案?

4 个答案:

答案 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)

您可以使用FileLock API。

我简要解释了它的工作原理here

答案 3 :(得分:0)

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

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