ZipOutputStream使用代码如下:
package cn.lfsenior.zipout;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class MyZip {
/**
* 压缩文件
* @param zipFileName 压缩文件全路径名
* @param inputFile 压缩文件夹全路径名
* @throws Exception
*/
public void zip(String zipFileName, File inputFile) throws Exception {
//创建压缩流对象
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
//调用Zip方法压缩文件夹
zip(out, inputFile, "");
System.out.println("压缩中....");
//关闭ZipOutputStream流
out.close();
}
/**
* 压缩文件夹的方法
* @param out ZipOutputStream对象
* @param f File对象,压缩文件夹对象
* @param base 进入点的名字
* @throws Exception
*/
public void zip(ZipOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
//如果是文件夹,则获得该文件夹中的所有对象,进行一下处理,并利用递归思想进行全部修改
File[] fl = f.listFiles();
//创建进入点
out.putNextEntry(new ZipEntry(base+"/"));
//如果进入点名字的长度为0的话说明是第一次进来,不然的话加上“/”
base=base.length()==0?"":base+"/";
for (int i = 0; i < fl.length; i++) {
//调用该方法,base为原base+“该文件的相对路径”
zip(out, fl[i],base+fl[i].getName());
}
} else {
//如果是文件,先创建进入点
out.putNextEntry(new ZipEntry(base));
//创建输出流对象
FileInputStream in = new FileInputStream(f);
//创建b接收字节数据
int b;
System.out.println(base);
//利用while循环进行读取文件内容
while ((b = in.read()) != -1) {
//调用ZipOutputStream的writer方法写出文件
out.write(b);
}
//关闭FileInputStream流
in.close();
}
}
public static void main(String[] args) {
MyZip book=new MyZip();
try {
book.zip("E:/hello.zip", new File("E:/hello"));
System.out.println("压缩完成");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}