Как заархивировать файл при записи в него? - PullRequest
7 голосов
/ 30 ноября 2010

Кто-нибудь знает способ архивации потока, в который вы пишете?Я пытаюсь избежать записи файла на диск, и мне было интересно, могу ли я просто сжать данные, когда вы записываете их в поток.быть очень большим, и мы хотим избежать записи всего разархивированного файла на диск.

Ответы [ 4 ]

8 голосов
/ 30 ноября 2010

Думаю, вас заинтересует ZipOutputStream . Вы можете записать в этот поток, а затем записать его в заархивированный файл.

Также ознакомьтесь с этим руководством для работы со сжатыми (заархивированными) файлами в Java Вот фрагмент из этого урока, который может быть полезной иллюстрацией:

     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
     File f = new File(".");
     String files[] = f.list();

     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();
5 голосов
/ 30 ноября 2010

Заверните еще один OutputStream в ZipOutputStream (или GZIPOutputStream) и вызовите методы записи для ZipOutputStream.

1 голос
/ 30 ноября 2010

Я делал это раньше в веб-приложении. Я получил ссылку на сервлет OutputStream, а затем передал его в ZipOutputStream. Тогда я просто застегнул молнию. Заархивированный файл был передан в браузер клиента. Легко.

0 голосов
/ 30 ноября 2010

Обычно это делается для веб-приложений, использующих фильтры:

http://tim.oreilly.com/pub/a/onjava/2003/11/19/filters.html

...