Как создать архив который включает в себя папки. Я делаю так:
| Код | // Рекурсивная функция для получения списка файлов private List<File> getFiles(String folder){ List<File> list = new ArrayList<File>(); File file = new File(folder);
if (file.isFile()) { list.add(file); } else { File [] files = file.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { List<File> resTmp = getFiles(files[i].getAbsolutePath()); Iterator<File> it = resTmp.iterator(); while (it.hasNext()) { list.add((File)it.next()); } } } else { System.out.println("I/O Errors in " + file.getAbsolutePath()); } } return list; } //Главная функция по созданию архива private String compressZIP(String folderPath) throws IOException{ String fileName = "archive.zip"; String archivePath = folderPath + File.separatorChar + fileName; System.out.println(archivePath); File archive = new File(archivePath); compress(archive, getFiles(folderPath)); return fileName; } // процедура сжатия private void compress(File archive, List<File> files) throws IOException { ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(archive))); try { for (File file : files) { FileInputStream fis = new FileInputStream(file); try { zos.putNextEntry(new ZipEntry(file.getName())); int read = -1; byte[] buffer = new byte[8 * 1024]; while ((read = fis.read(buffer)) != -1) { zos.write(buffer,0,read); } zos.closeEntry(); } finally { fis.close(); } } } finally { zos.flush(); zos.close(); } } void main(){ System.out.println(compressZIP("C:\\TEMP\\FOLDER")); }
|
Если в папке FOLDER есть еще папки и в них файлы, то данный код сохранит архив в котором будут все файлы из всех папок в корне архива. А мне нужно чтоб структура папок была соблюдена в архиве после C:\TEMP\FOLDER\ Как реализовать?
Спасибо. Надеюсь объяснил понятно.
|