我在使用Files.createFile()的测试服务器上得到了一个非常奇怪的行为。
代码看起来像这样:
Files.createFile(myPath);
... code adding that file to a zip file ...
在myPath创建的文件有些内容未包含在zip内容中,通常不包括在内,也不会抛出异常。我永远无法在运行CentOS 6.6版(最终版)的测试服务器之外重现该问题并且具有ext4文件系统。在createFile之后执行Files.exists(myPath)总是返回true。
我尝试在文件中写几个字符来检查它是否有所不同,但事实并非如此。
FileUtils.writeStringToFile(testLog.toFile(), "Test content");
如果我在中间添加一个短暂的睡眠,那么该文件将始终包含在zip中。
始终如一地工作:
Files.createFile(myPath);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//interrupted
}
... code adding that file to a zip file ...
我对此的看法是文件系统中存在一些奇怪的异步行为,因为Thread.sleep()在此代码中永远不会有任何区别。
有没有人明确解释睡眠会如何产生影响?
编辑:我的问题实际上不是关于压缩方法,而是关于createFile方法异步行为,而不应该。
感谢您的帮助!
答案 0 :(得分:-1)
为什么不使用zip文件系统提供程序?
final Path zipPath = Paths.get("pathToZipFileHere");
final URI uri = URI.create("jar:" + zipPath.toUri());
final Path fileInZip;
// Open the zip as a filesystem
try (
final FileSystem fs = FileSystems.newFileSystem(uri,
Collections.emptyMap());
) {
fileInZip = fs.getPath("path/in/zip");
// work with fileInZip
}