java 压缩和解压

来源:互联网 发布:知乎 手机已注册 解除 编辑:程序博客网 时间:2024/05/23 01:14
package bZIP;
import java.io.*;
import java.util.zip.*;


public class CZIP {
public static void main(String []args){
// ZIP("C:/Users/Administrator/Desktop/zip.zip","C:/Users/Administrator/Desktop/1");
unZIP("C:/Users/Administrator/Desktop/zip.zip","C:/Users/Administrator/Desktop");
}
public static void ZIP(String zipName,String folderName){
File file=new File(folderName);
if (!file.exists()) {
System.out.println("要压缩的文件不存在");
return;
}
try {
ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipName));
System.out.println("正在压缩。。。");
ZIP(out,file,"zip");
out.close();
System.out.println("压缩完成");
} catch ( IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void ZIP(ZipOutputStream out,File f,String base) throws IOException{
if(f.isDirectory()){
out.putNextEntry(new ZipEntry(base+"/"));
base=base.length()==0?"":base+"/";
for(File file:f.listFiles()){
ZIP(out,file,base+file.getName());
}
}
else{
out.putNextEntry(new ZipEntry(base));
FileInputStream fis=new FileInputStream(f);
byte []bt=new byte[(int)f.length()];
int b=fis.read(bt);
if(b!=-1){
out.write(bt,0,b);
}
fis.close();
}
}
public static void unZIP(String zipFile,String outFile){
File f=new File(zipFile);
if(!f.exists()){System.out.println("压缩文件找不到");return;}
try {
ZipInputStream zis=new ZipInputStream(new FileInputStream(f));
ZipEntry ze;
File file;
BufferedInputStream bis=new BufferedInputStream(zis);
//这里用缓冲读取速度快,其实用zis也是能读取的
while((ze = zis.getNextEntry())!=null ){ 
if (!ze.isDirectory()) {
file = new File(outFile, ze.getName());
FileOutputStream out = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(out);
//这里用缓冲写入,其实用out写入也是行的
int b;
while ((b = bis.read()) != -1) {
bos.write(b);
}
bos.close();
out.close();
System.out.println(file + "解压成功");
}
else{
File fl=new File(outFile+File.separator+ze.getName());
if(!fl.exists()){
fl.mkdirs();
}
}
            }  
bis.close();
zis.close();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

}
}