只选择java中完全编写的文件

时间:2013-04-09 07:28:39

标签: java java-ee file-io aix

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

4 个答案:

答案 0 :(得分:1)

尝试Apache Camel文件轮询器和策略OF或文件重命名以检测正在进行的文件访问

答案 1 :(得分:1)

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

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

结尾的文件

或者,如前所述,由alexcpn查看Apache Camel File Component ...

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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