zip каталог с файлами и подкаталогами без абсолютного пути в Java - PullRequest
0 голосов
/ 30 января 2012

У меня есть программа на Java, которая архивирует все файлы и подкаталоги каталога. Он создает ZIP-файл с абсолютным путем, например, c: \ dir1 \ dirzip \, но я хочу, чтобы он создавал файл только с файлами de и подкаталогами, а не с абсолютным путем. Может мне помочь, пожалуйста ?? Это мой код:

import java.io.*;
import java.util.zip.*;

public class zip {

    public static void main(String argv[]) {
        try {

            ZipOutputStream zos =
                new ZipOutputStream(new FileOutputStream(
                    "c:\\pruebazip\\dancedragons.zip"));

            zipDir("c:\\pruebazip\\dancedragons\\", zos);

            zos.close();
        }
        catch (Exception e) {

        }
    }

    public static void zipDir(String dir2zip, ZipOutputStream zos) {
        try {

            File zipDir = new File(dir2zip);
            // lista del contenido del directorio
            String[] dirList = zipDir.list();
            // System.out.println(dirList[1]);
            byte[] readBuffer = new byte[2156];
            int bytesIn = 0;

            System.out.println(dirList.length);
            // recorro el directorio y añado los archivos al zip
            for (int i = 0; i < dirList.length; i++) {
                File f = new File(zipDir, dirList[i]);
                if (f.isDirectory()) {

                    String filePath = f.getPath();
                    zipDir(filePath, zos);

                    System.out.println(filePath);
                    continue;
                }

                FileInputStream fis = new FileInputStream(f);

                ZipEntry anEntry = new ZipEntry(f.getPath());

                zos.putNextEntry(anEntry);

                while ((bytesIn = fis.read(readBuffer)) != -1) {
                    zos.write(readBuffer, 0, bytesIn);
                }

                fis.close();
            }
        }
        catch (Exception e) {
            // handle exception
        }

    }

}

Ответы [ 2 ]

6 голосов
/ 30 января 2012

Если вы хотите, чтобы каждая запись zip сохранялась в структуре каталогов относительно zip-папки, вместо создания ZipEntry с полным путем к файлам:

new ZipEntry(f.getPath());

Создайте его с помощьюпуть относительно zip-каталога:

String relativePath = zipDir.toURI().relativize(f.toURI()).getPath();
new ZipEntry(relativePath);
1 голос
/ 30 января 2012

Ваша проблема может быть утверждение

new ZipEntry(f.getPath())

Дважды проверьте, что f.getPath () не является абсолютным путем, как C:\dir\....

Вы можете захотеть что-то вроде new ZipEntry(dirList[i]).

...