繁体   English   中英

NoSuchFileException使用Java NIO将文件添加到ZIP

[英]NoSuchFileException adding file to ZIP using Java NIO

使用Java NIO将文件添加到现有ZIP时,我遇到了一个令人沮丧的问题。

在2500个文件的测试中,2或3将失败。 我将文件添加到ZIP的根目录而不是子文件夹中(该子文件夹似乎是其他帖子中某些问题的来源)。

奇怪的是,它声称不存在的异常消息中引用的文件既不是ZIP也不是要添加的文件,而是Java在构建新的ZIP文件时创建的临时文件。 这是代码(减去try / catch):

Map<String, String> zipProps = new HashMap<>();
zipProps.put("create", "false");
zipProps.put("encoding", "UTF-8");
FileSystem zipFs = null;

URI zipAsFileSys = new URI("jar", fileToArchive.toURI().toString(), null);
zipFs = FileSystems.newFileSystem(zipAsFileSys, zipProps);
Path pathToNewFileInZip = zipFs.getPath(fileIdFile.getName());
Path pathToNewFileOnDisk = Paths.get(fileIdFile.getAbsolutePath());
Files.createFile(pathToNewFileInZip ); //Added later. No difference.
Files.copy(pathToNewFileOnDisk, pathToNewFileInZip, StandardCopyOption.REPLACE_EXISTING);
if(zipFs!=null) zipFs.close(); 

和例外:

Exception: java.nio.file.NoSuchFileException: \\Server\archives\zipfstmp7224673021628877485.tmp

最终,这可追溯到操作远程驱动器上的文件时的网络延迟和/或Windows缓存。

似乎Java无法确定它刚刚创建的文件确实存在。 如果可以在tmp文件上获取一个句柄以查看它是否存在,那将是很好的。

看到我没有搞乱操作系统缓存的能力,除了在Files.copy(...)调用之前引入延迟外,而且因为我们的生产环境没有使用多台服务器,所以我从未找到一种好的解决方法对于这项确切的任务,这并没有阻止我继续前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM