我有我的筆記本電腦以下目錄:保留在拉鍊遞歸目錄結構與Java 8
/tmp/
myapp/
assets/
config.yml
models/
troll.ply
tree.ply
textures/
troll-skin.png
tree-skin.png
我想壓縮/tmp/myapp/assets
(及其所有的遞歸內容)成一個名爲assets.zip
ZIP,這樣,當我解壓縮(通過unzip assets.zip
)時,它保留assets
文件夾下的目錄結構。因此,解壓縮後,它會在ZIP的「根目錄」中顯示config.yml
,並在ZIP中顯示2個目錄(models
和textures
)。該文件的其餘部分將這些各子目錄裏面,等
當我運行這段代碼:
File sourceDir = new File("/tmp/myapp/assets");
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("/Users/myuser/archives/assets.zip"));
File[] contents = sourceDir.listFiles();
for(File file : contents) {
zip.putNextEntry(new ZipEntry(file.name));
InputStream isteam = new FileInputStream(file);
Files.copy(isteam, zip);
zip.closeEntry();
isteam.close();
}
zip.close();
代碼正確地/Users/myuser/archives/assets.zip
創建ZIP。
然而,當我將它解壓縮(unzip /Users/myuser/archives/assets.zip
),然後運行ls -al /Users/myuser/archives
,我的輸出是:
-rw-r--r-- 1 myuser 1754083733 492 Dec 30 14:14 assets.zip
-rw-r--r-- 1 myuser 1754083733 10 Dec 30 14:14 config.yml
-rw-r--r-- 1 myuser 1754083733 7 Dec 30 14:14 models
-rw-r--r-- 1 myuser 1754083733 9 Dec 30 14:14 textures
因此,無論models
和textures
正在像文件處理(而不是作爲目錄)。此外,當我採取偷看在「models
文件」的內容,看來該內容troll.ply
和tree.ply
已串接在它的內部,並同上爲「tree
文件」與2個PNG圖像。
我該如何調整它,使目錄結構(無論多深/嵌套)始終保存在結果ZIP中?
有一個在你的代碼沒有遞歸... – Holger