-1

我在 aix 中有一个目录,它将接收来自外部应用程序的文件。我的 java 程序应该只选择那些完全由应用程序编写的文件。它不应该选择仍然由外部应用程序编写的不完整文件。有人可以帮忙提供样品吗?

4

4 回答 4

1

解决此问题的一种常见方法是在文件完全写入后重命名文件。

例如,您的应用程序写入 myFile.txt.tmp,一旦完成,它就会将其重命名为 myFile.txt。这样做您只需忽略以 .tmp 结尾的文件...

或者,正如已经说过的,通过 alexcpn 看看Apache Camel 文件组件......

于 2013-04-09T08:10:28.633 回答
1

尝试使用 Apache Camel File Poller 和策略操作系统或文件重命名以检测正在进行的文件访问

于 2013-04-09T07:35:00.943 回答
0

在 Windows 中,无法知道文件何时被锁定以供另一个应用程序写入,我之前遇到过同样的问题。您可以尝试使用 JNotify 来侦听事件并处理发生的异常,据我所知没有其他方法,但是在 Unix 中检查文件是否被锁定应该可以完成这项工作new File(fileName).canWrite()

于 2013-04-09T07:38:09.910 回答
0

我的方法是先将文件写入“临时”目录。写入文件完成后,应将其移至最终目的地。注意将“临时”和“最终”目录放在同一个文件系统上;否则,File.renameTo()可能会或可能不会工作。使用 Java 7 时,Files.move()可能会更好用。

显然,您的应用程序只需检查“最终”目录中的文件,因为您知道该目录中的所有文件都已完全写入。

于 2013-04-09T07:34:25.273 回答