孙海龙的博客
记录笔记
Java生成Zip文件
2014-07-24 17:57:43   阅读1563次

java.util.zip包中提供了生成zip文件的服务

以下的例子演示了几种情况的做法

1。最简单,生成的zip中包含两个文件。

import java.io.*;import java.util.zip.*;
public class Myzip{
 public static void main(String[] args) throws Exception {
   OutputStream os = new FileOutputStream("a.zip");
     ZipOutputStream zos = new ZipOutputStream(os);
      // 建立了有zip能力的输出流    
      PrintWriter pw = new PrintWriter(zos);
        // 建立一个便于按文本方式操作的输出流(编码方式=本机默认,即GB2312)
          // 如果希望指定特殊的编码方式,请使用new BufferedWriter(new OutputStreamWriter(xxx, xxx))的方式    
          zos.putNextEntry(new ZipEntry("aaa.txt")); 
          pw.println("aaa的第一行");  pw.println("aaa second line");  
          pw.flush();  
          zos.closeEntry();    
          zos.putNextEntry(new ZipEntry("bbb.txt"));  
          pw.println("1.  bbbb");  
          pw.println("2.  bbbb");  
          pw.flush();  
          zos.closeEntry();
              pw.close(); 
              }
              }


2。考虑编码方式:


/*
  压缩中的文件使用编码方式(按文本文件的观点)
  可以指定 GB2312, UTF-8等
*/

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

public class MyZip2
{
 public static void main(String[] args) throws Exception
 {
  OutputStream os = new FileOutputStream("a.zip");
  ZipOutputStream zos = new ZipOutputStream(os); // 建立了有zip能力的输出流
  
  //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(zos, "GB2312"));
  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(zos, "UTF-8"));
  
  zos.putNextEntry(new ZipEntry("aaa.txt"));
  bw.write("aaa的第1行\r\n");
  bw.write("aaa的第2行\r\n");
  bw.flush();
  zos.closeEntry();
  
  zos.putNextEntry(new ZipEntry("bbb.txt"));
  bw.write("bbb的第1行\r\n");
  bw.write("bbb的第2行\r\n");
  bw.flush();
  zos.closeEntry();
  
  bw.close();
 }
}

3。生成到一个内存流中,而不写文件

/*
  不是写入到一个文件中,而是把压缩文件的内容写入一个byte数组中。
  今后可以把这个数组作为 Blob 数据写入数据库中。
*/

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

public class MyZip3
{
 public static void main(String[] args) throws Exception
 {
  ByteArrayOutputStream bos = new ByteArrayOutputStream();  // 代表内存中的一个输出流对象,大小访问size()方法
  
  ZipOutputStream zos = new ZipOutputStream(bos); // 建立了有zip能力的输出流
  
  //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(zos, "GB2312"));
  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(zos, "UTF-8"));
  
  zos.putNextEntry(new ZipEntry("aaa.txt"));
  bw.write("aaa的第1行\r\n");
  bw.write("aaa的第2行\r\n");
  bw.flush();
  zos.closeEntry();
  
  zos.putNextEntry(new ZipEntry("bbb.txt"));
  bw.write("bbb的第1行\r\n");
  bw.write("bbb的第2行\r\n");
  bw.flush();
  zos.closeEntry();
  
  bw.close();
  
  System.out.println("内存流的size为:" + bos.size());
 }
}




-----------------------------------------------------
转载请注明来源此处
原地址:#

-----网友评论----
1楼:太空守望者 发表于 2014-07-25 08:45:53
你的代码没有格式化哦
2楼:太空守望者 发表于 2014-07-25 08:47:11
可以用java格式化你的代码
-----发表评论----
微网聚博客乐园 ©2014 blog.mn886.net 鲁ICP备14012923号   网站导航