Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Архивирование с вложеными папками


Автор: MasterOfCode 25.2.2011, 10:30
Как создать архив который включает в себя папки.
Я делаю так:
Код

    // Рекурсивная функция для получения списка файлов
    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\ 
Как реализовать?

Спасибо. Надеюсь объяснил понятно.

Автор: aleksandy 25.2.2011, 10:55
http://stackoverflow.com/questions/1399126/java-util-zip-recreating-directory-structure

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)