У меня есть следующий каталог на моем ноутбуке:Сохраняя рекурсивную структуру каталогов в молниях с Java 8
/tmp/
myapp/
assets/
config.yml
models/
troll.ply
tree.ply
textures/
troll-skin.png
tree-skin.png
Я хотел бы, чтобы пронестись /tmp/myapp/assets
(и весь его рекурсивные содержимое) до в ZIP с именем assets.zip
, таким образом, что , когда я разархивирую его (через unzip assets.zip
), он сохраняет структуру каталогов в папке assets
. Следовательно, при распаковке он будет показывать config.yml
в «корне» ZIP и 2 каталогах внутри ZIP (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();
код правильно создает ZIP в /Users/myuser/archives/assets.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