java多⽂件_关于Java:如何同时处理多个⽂件?
我遇到的⼀种情况是,爬⽹程序会定期将Web存档⽂件(warc)放在不同的⽬录中。每个warc⽂件内部包含数千个HTML⽂件。
现在,我需要构建⼀个框架来有效地处理这些⽂件。我知道Java在I / O的并⾏处理⽅⾯⽆法扩展。我在想的是拥有⼀个监视线程,该线程可以扫描该⽬录,选择⽂件名,然后放⼊Executor服务或某些Java阻⽌队列。在执⾏程序服务下侦听的⼀堆⼯作线程(可能是少数I / O问题)将读取⽂件,读取其中的HTML⽂件并进⾏相应的处理。这是为了确保线程不会争⽤同⼀⽂件。
就性能和可伸缩性⽽⾔,这是正确的⽅法吗?另外,⼀旦处理完⽂件,如何处理?理想情况下,应移动或标记⽂件,以免线程再次拾取它们。可以通过Future对象处理吗?
我的主要建议是除⾮有特殊要求,否则避免重新发明轮⼦。
如果您使⽤的是Java 7,则可以利⽤WatchService(如Simeon G所建议)。
如果限于Java 6或更早版本,则JRE中不提供这些服务。但是,Apache Commons-IO提供⽂件监视。请参见此处。
作为与Java 7相⽐的⼀项优势,Commons-IO监视器将为您创建⼀个线程,该线程针对已注册的回调引发事件。使⽤Java 7,您将需要⾃⼰轮询事件列表。
⼀旦发⽣事件,建议使⽤ExecutorService处理线程外⽂件是⼀个很好的建议。 Java IO⽀持移动⽂件,您可以忽略任何引发的删除事件。
我过去曾成功使⽤过这种模型。
这⾥有⼀些注意事项:
⼀旦⽂件存在于⽬录中,就可能引发新⽂件事件。但是,数据仍将被写⼊其中。考虑对⽂件⼤⼩的合理预期,以及直到⽂件被视为"完整"需要等待多长时间
您必须在⽂件上花费的最长时间是多少?
通过配置使执⾏程序服务参数可调整-这将简化性能测试
希望这可以帮助。祝好运。
java修改html文件@Ryan ...感谢您的指导。我在Java 6中⽆法使⽤WatchService,但是我确实看过jpathwatch,它类似
于WatchService。创建⽂件时,监视器将引发事件。就我⽽⾔,⽣成warc⽂件的⼯具⾸先创建⼀个临时⽂件,然后向其中写⼊数据。完成后,它将gzip⽂件压缩。我希望这是⼀个新的⽂件扩展名,因此侦听器会将其视为新的⽂件事件。在这种情况下,对我来说很容易跟踪。
在Java的最新版本(我相信从1.5开始)中,已经将内置的⽂件更改通知服务作为本机io库的⼀部分。您可能需要先检查⼀下,⽽不要⾃⼰检查。看这⾥
感谢您的答复。这可能有助于确定是否将新⽂件拖放到⽬录中,但这并不能真正解决我的问题。根据要求,处理完⽂件后,我需要将⽂件移动到存档⽂件夹中。我可以让⼯作线程⼀旦完成就进⾏⽂件移动,但是这需要通知主线程。原因是,如果⼯作进程失败,则需要再次重试该⽂件。
@simeon ..此功能在jdk 7中可⽤,但我仍然在jdk 6中。在做⼀些研究后,我发现了⼀个名为jpathwatch的相似库,它提供了相似的功能。请检查⼀下。感谢您的指导。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论