java压缩文件需要用的java.util.zip包中的ZipEntry和ZipOutputStream类。
ZipEntry类产生的对象,是用来代表一个ZIP压缩文件内的进入点(entry,感觉像是最终生成的zip文件中的一个目录或具体的文件)。
ZipOutputStream类用来写出ZIP压缩格式的文件,而且支持已压缩和未压缩的进入点(entry,就是已经压缩过的文件和没有压缩过的文件都可以)。
具体看代码:
package com.lsy.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class MyZip {
private void zip(String zipFileName,File inputFile)throws Exception{
ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
System.out.println("压缩中>>>>");
zip(out,inputFile,"");
out.close();
}
private void zip(ZipOutputStream out,File f,String base)throws Exception{
if(f.isDirectory()){
File[] fs=f.listFiles();
out.putNextEntry(new ZipEntry(base+"/"));
base=base.length()==0?"":base+"/";
for(int i=0;i<fs.length;i++){
zip(out,fs[i],fs[i].toString().substring(fs[i].toString().indexOf("\\")+1, fs[i].toString().length()));
}
}else{
out.putNextEntry(new ZipEntry(base));
FileInputStream in=new FileInputStream(f);
int b;
System.out.println(">>>"+base+">>>>");
while((b=in.read())!=-1){
out.write(b);
}
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) {
e.printStackTrace();
}
}
}