在java中查看新文件的文件夹的最佳API

我需要为新文件观看特定文件夹,每当新文件到达时,我需要对其中一个索引软件执行一些处理和处理数据。

我需要做的就是,观看文件夹,每当有新文件进来时,我都需要阅读它的内容。 Flume假脱机目录看起来很合适,但这是我正在考虑的挑战。

1)只读取一次文件,不应读取任何已读取的文件。 2)文件的完整性,例如:如果文件没有完全复制,可以说.staging或.tmp文件在那里,我不应该读它们。 3)输入文件可以是巨大的,它们是xmls。 因此,在拆分中读取文件对我的原因没有帮助。 我需要完整地读取文件并处理它们。 4)由于文件的大小可能很大,因此水槽似乎存在大文件的问题。 它能否符合我的要求。 或者我应该检查任何其他文件观察者。?

你能否建议最佳选择来执行文件观看。 水槽假脱机能做到这一切吗?

我不能说任何关于水槽的事情,我对它不熟悉。

你可以做其中一件事。

首先,您可以使用一种类型的名称(如newfile.copying)将文件复制到目录中,然后在复制完成后将它们重命名为“newfile”。 然后在扫描期间,您只需忽略“* .copying”文件。

您可以在加载文件时监视文件的文件大小,如果文件大小在一段时间(几秒钟)后没有更改,则可以假定文件已完成复制并开始处理。

最后,您应该只有一个“完成”目录(在同一个驱动器上),并在完成后将文件重命名为该目录。

另一种选择是你可以有三个目录:“传入”,“工作”,“完成”。

文件将复制到“传入”目录中。 在开始处理它们之前,将它们重命名为“working”目录。 最后,然后将其移出“完成”目录。

这使您能够在系统中断时进行恢复。 您将“知道”您正在处理的最后一个文件是什么,您可以重新处理它,或者您喜欢的任何内容。

重命名选项很重要,因为在同一文件系统上,它们是primefaces的。 你永远不会在一个目录中拥有一个文件而不是另一个目录,或者同时拥有一个名称和另一个名称。

如果您使用的是Java 7+,请使用Java自己的java.nio.file.WatchService 。 它是最好的,因为它可以按预期工作(除了Linux上的一个错误)并且不依赖于额外的库。