java 原生解压_原生java 压缩解压zip文件

importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.charset.Charset;importjava.util.zip.ZipEntry;importjava.util.zip.ZipInputStream;importjava.util.zip.ZipOutputStream;public classZipUtil {static int k = 1; //定义递归次数变量

public static voidmain(String[] args) {

compression("D:\\1111", "D:\\usr\\oracle\\weblogic\\user_projects\\domains\\spsj\\files\\spdbFolder\\T0\\HB11512900H000120161130001220112.zip");

decompression("D:\\usr\\oracle\\weblogic\\user_projects\\domains\\spsj\\files\\spdbFolder\\T0\\HB11512900H00012016113000122011.zip", "GBK", "D:\\1222");

}/***

* @Description (压缩)

*@throwsException*/

private static voidcompression(String inputFilePath, String outPutZip) {try{

String zipFileName=outPutZip;

File inputFile= newFile(inputFilePath);

System.out.println("压缩中...");

ZipOutputStream out= new ZipOutputStream(newFileOutputStream(

zipFileName));

BufferedOutputStream bo= newBufferedOutputStream(out);

zip(out, inputFile, inputFile.getName(), bo);

bo.close();

out.close();//输出流关闭

System.out.println("压缩完成");

}catch(Exception e) {

e.printStackTrace();

}

}private static void zip(ZipOutputStream out, File inputFile, String base, BufferedOutputStream bo) throws Exception { //方法重载

if(inputFile.isDirectory()) {

File[] fl=inputFile.listFiles();if (fl.length == 0) {

out.putNextEntry(new ZipEntry(base + "/")); //创建zip压缩进入点base

System.out.println(base + "/");

}for (int i = 0; i < fl.length; i++) {

zip(out, fl[i], base+ "/" + fl[i].getName(), bo); //递归遍历子文件夹

}

System.out.println("第" + k + "次递归");

k++;

}else{

out.putNextEntry(new ZipEntry(base)); //创建zip压缩进入点base

System.out.println(base);

FileInputStream in= newFileInputStream(inputFile);

BufferedInputStream bi= newBufferedInputStream(in);intb;while ((b = bi.read()) != -1) {

bo.write(b);//将字节流写入当前zip目录

}

bi.close();

in.close();//输入流关闭

}

}/***

* @Description (解压)

*@paramzipPath zip路径

*@paramcharset 编码

*@paramoutPutPath 输出路径*/

private static voiddecompression(String zipPath, String charset, String outPutPath) {long startTime=System.currentTimeMillis();try{

ZipInputStream Zin=new ZipInputStream(new FileInputStream(zipPath), Charset.forName(charset));//输入源zip路径

BufferedInputStream Bin=newBufferedInputStream(Zin);

String Parent= outPutPath; //输出路径(文件夹目录)

File Fout=null;

ZipEntry entry;try{while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){

Fout=newFile(Parent,entry.getName());if(!Fout.exists()){

(newFile(Fout.getParent())).mkdirs();

}

FileOutputStream out=newFileOutputStream(Fout);

BufferedOutputStream Bout=newBufferedOutputStream(out);intb;while((b=Bin.read())!=-1){

Bout.write(b);

}

Bout.close();

out.close();

System.out.println(Fout+"解压成功");

}

Bin.close();

Zin.close();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}long endTime=System.currentTimeMillis();

System.out.println("耗费时间: "+(endTime-startTime)+" ms");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值