【发布时间】:2023-04-01 10:51:01
【问题描述】:
我需要帮助来解决有关过滤未完全编写的文件的问题,因为在这种情况下我遇到了异常。
场景是:我有一个程序从队列中获取文件并将其放在服务器上的某个位置,另一个程序从该位置读取这些文件,这两个程序都在连续运行,并且消费者不断轮询以检查是否存在该位置是否存在任何文件,导致有时读取不完整的 xml 文件并在解析时引发错误。
我写了一个代码来只读那些可以在读写模式下访问的文件,这似乎在windows环境下工作,但在linux上失败。
在windows上运行的代码sn-p如下:
listOfFiles = folder.listFiles(new FileFilter() {
public boolean accept(final File file) {
try (RandomAccessFile stream = new RandomAccessFile(file, "rw")) {
return true;
} catch(final Exception e) {
System.out.println("skipping file: file is not completely written");
}
return false;
}
});
有人可以帮我解决这个问题,为什么这段代码在 windows 上运行而不在 linux 上运行,或者有更好的解决方案吗?
【问题讨论】:
-
您遇到的异常是什么?请发帖
-
“消费者不断轮询以检查该位置是否存在任何文件” - 听起来像是
WatcherService的完美候选者 -
@Prashant 不幸的是,我在我的工作机器上遇到了这个异常,我不允许登录到 stackoverflow,因此我从我的个人机器上发布这个,我在个人机器上没有日志:但我得到异常说“文件过早结束”
-
如果您没有向我们提供可验证的最小问题,您希望我们如何提供帮助?
-
@Prashant 感谢关于使用观察者服务的建议。虽然我没有使用 watcherservice 方法,因为这意味着对这两个服务进行完全重新设计,然后再次测试已经投入生产的东西,但是如果我们计划将来迁移这两个服务,肯定会考虑使用它. +1 建议
标签: java file filefilter