如何在写入文件时压缩文件?

时间:2010-11-29 21:27:29

标签: java file zip stream compression

有没有人知道如何压缩您要写入的流?我试图避免将文件写入磁盘,并且想知道我是否可以在将数据写入流时压缩数据。

这背后的用例是原始文件非常大,我们希望避免将整个内容解压缩到磁盘上。

4 个答案:

答案 0 :(得分:8)

我想你会对ZipOutputStream感兴趣。您可以写入该流,然后将其写入压缩文件。

另外,请查看本教程中的working with compressed (zipped) files in 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();

答案 1 :(得分:5)

ZipOutputStream(或GZIPOutputStream)中换写另一个OutputStream,并在ZipOutputStream上调用写入方法。

答案 2 :(得分:1)

我之前在网络应用中做过这个。我得到了对servlet OutputStream的引用,然后将其提供给ZipOutputStream。然后我就拉链了。压缩文件已提供给客户端浏览器。容易。

答案 3 :(得分:0)

这通常用于使用过滤器的Web应用程序:

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