[英]RandomAccessFile filter with read write mode does not work on linux environment
我需要帮助来解决有关过滤尚未完全编写的文件的问题,因为在这种情况下我会遇到异常。
方案是:我有一个程序从队列中取出文件并将其放在服务器上的某个位置,另一个程序从该位置读取这些文件,这两个程序连续运行,并且使用者不断查询是否有文件出现在该位置,导致有时读取不完整的xml文件,并且在parisng时抛出错误。
我已经编写了一个代码,以仅读取那些可以在读写模式下访问的文件,该文件似乎在Windows环境下工作,但在Linux上失败。
在Windows上运行的代码段如下所示:
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上运行,还是有更好的解决方案?
如果您依赖R / W open告诉您文件是否可用,则使用的技术错误。
考虑到可用的所有不同类型的文件系统,没有内置的Java机制可确保文件“完整”。 由于您控制过程的两端,因此解决方案非常简单。
将文件移到要处理的位置的过程将使用读取过程知道忽略的临时文件名格式写入文件。 写入过程完成文件的写入后,它将文件重命名为读取过程知道已完成的名称格式。 然后,根据定义,如果文件在读取过程中“可见”,则说明文件已完成。
步骤如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.