您的位置:首页 > 编程语言 > Java开发

JAVA实现实用的ZIP压缩与解压

2014-12-09 16:25 357 查看
程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

[java] view
plaincopy

package com.han;

import java.io.*;

import java.util.zip.*;

/**

* 程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

* <p>

* 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

* <p>

* 在本段代码中,实现的是压缩部分;解压部分见本包中Decompression部分。

*

* @author HAN

*

*/

public class MyZipCompressing {

private int k = 1; // 定义递归次数变量

public MyZipCompressing() {

// TODO Auto-generated constructor stub

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyZipCompressing book = new MyZipCompressing();

try {

book.zip("C:\\Users\\Gaowen\\Desktop\\ZipTestCompressing.zip",

new File("C:\\Users\\Gaowen\\Documents\\Tencent Files"));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private void zip(String zipFileName, File inputFile) throws Exception {

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

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

zipFileName));

BufferedOutputStream bo = new BufferedOutputStream(out);

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

bo.close();

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

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

}

private void zip(ZipOutputStream out, File f, String base,

BufferedOutputStream bo) throws Exception { // 方法重载

if (f.isDirectory()) {

File[] fl = f.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 = new FileInputStream(f);

BufferedInputStream bi = new BufferedInputStream(in);

int b;

while ((b = bi.read()) != -1) {

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

}

bi.close();

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

}

}

}

[java] view
plaincopy

package com.han;

import java.io.*;

import java.util.zip.*;

/**

* 程序实现了ZIP压缩。共分为2部分 :

* 压缩(compression)与解压(decompression)

* <p>

* 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。

* 需在代码中自定义源输入路径和目标输出路径。

* <p>

* 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。

* @author HAN

*

*/

public class CopyOfMyzipDecompressing {

public static void main(String[] args) {

// TODO Auto-generated method stub

long startTime=System.currentTimeMillis();

try {

ZipInputStream Zin=new ZipInputStream(new FileInputStream(

"C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//输入源zip路径

BufferedInputStream Bin=new BufferedInputStream(Zin);

String Parent="C:\\Users\\HAN\\Desktop"; //输出路径(文件夹目录)

File Fout=null;

ZipEntry entry;

try {

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

Fout=new File(Parent,entry.getName());

if(!Fout.exists()){

(new File(Fout.getParent())).mkdirs();

}

FileOutputStream out=new FileOutputStream(Fout);

BufferedOutputStream Bout=new BufferedOutputStream(out);

int b;

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");

}

}

转载:http://blog.csdn.net/gaowen_han/article/details/7163737/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: