簡體   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