【发布时间】:2015-06-08 19:49:57
【问题描述】:
我在使用 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
【问题讨论】: