我需要为新文件查看特定文件夹,每当新文件到达时,我需要对其中一个索引软件执行一些处理和处理数据。
我需要做的就是,观看文件夹,每当有新文件进来时,我都需要阅读它的内容。 Flume假脱机目录看起来很合适,但这是我正在考虑的挑战。
1)只读取一次文件,不应读取任何已读取的文件。 2)文件的完整性,例如:如果文件尚未完全复制,请说.staging或.tmp文件在那里,我不应该阅读它们。 3)输入文件可以是巨大的,它们是xmls。因此,在拆分中读取文件对我的原因没有帮助。我需要完整地读取文件并处理它们。 4)由于文件的大小可能很大,因此水槽似乎存在大文件的问题。它能否符合我的要求。或者我应该检查任何其他文件观察者。?
请您建议执行文件观看的最佳选项。水槽假脱机能做到这一切。?
答案 0 :(得分:3)
如果您使用的是Java 7+,请使用Java自己的java.nio.file.WatchService
。它是最好的,因为它可以按预期工作(除了Linux上的一个错误)并且不依赖于额外的库。
答案 1 :(得分:0)
我不能说任何关于水槽的事情,我对它不熟悉。
你可以做其中的一件事。
首先,您可以使用一种类型的名称(如newfile.copying)将文件复制到目录中,然后将它们重命名为" newfile"复制完成后。然后在扫描期间,您只需忽略" *。复制"文件。
您可以在加载文件时监控文件的文件大小,如果文件大小在一段时间(几秒钟)后没有更改,那么您可以假设文件已完成复制并开始处理。
最后,你应该完成一个"完成"目录(在同一个驱动器上),并在完成后将文件重命名为该目录。
另一个选择是你可以有三个目录:"传入","工作","完成"。
将文件复制到"传入"目录。在开始处理它们之前,将它们重命名为" working"目录。最后你将它移出"完成" 。目录
这使您能够在系统中断时进行恢复。你会知道"你正在处理的最后一个文件是什么,你可以重新处理它,或者你喜欢什么。
重命名选项很重要,因为在同一文件系统上,它们是原子的。您永远不会在一个目录中拥有文件而不能拥有另一个目录,或者同时拥有一个名称和另一个名称。