Java API для ZIP-файлов - PullRequest
       19

Java API для ZIP-файлов

0 голосов
/ 25 февраля 2012

Я использую java.util.zip для архивирования некоторых файлов в java. Проблема, с которой я столкнулся, заключается в том, что заархивированный файл создаст папки для всех родительских каталогов. Например, если у меня есть файл в C: /folder1/folder2/folder3/file.txt

Это создаст заархивированный файл с папкой с именем папка 1, затем папка 2 и т. Д. До file.txt.

Результат, который я ищу, - это заархивированная папка с файлом file.txt в корне без каких-либо папок.

Вот пример кода

BufferedInputStream origin = null;
         FileOutputStream dest = new 
           FileOutputStream("c:\\zip\\myfigs.zip");
         ZipOutputStream out = new ZipOutputStream(new 
           BufferedOutputStream(dest));
         //out.setMethod(ZipOutputStream.DEFLATED);
         byte data[] = new byte[BUFFER];
         // get a list of files from current directory
         String files[] = {"C:/folder1/folder2/folder3/file.txt"};

         for (int i=0; i<files.length; i++) {
            System.out.println("Adding: "+files[i]);
            FileInputStream fi = new 
              FileInputStream(files[i]);
            origin = new 
              BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry(files[i]);
            out.putNextEntry(entry);
            int count;
            while((count = origin.read(data, 0, 
              BUFFER)) != -1) {
               out.write(data, 0, count);
            }
            origin.close();
         }
         out.close();
      } catch(Exception e) {
         e.printStackTrace();
      }

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Заменить эту строку

ZipEntry entry = new ZipEntry(files[i]);

от

ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/")+1));

Когда вы создаете zipEntry, вам нужно указать имя файла, а не полный путь.

EDIT:

Более чистым способом (как прокомментировал Луи Вассерман) было бы использование объекта File и получение имени файла. Это будет способ проверить, существует ли файл перед его архивированием.

0 голосов
/ 25 февраля 2012

Возможно, вы захотите взглянуть на ответ, который был задан, когда был задан похожий вопрос: Как мне застегнуть молнию ...

...