我有我的笔记本电脑以下目录:保留在拉链递归目录结构与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