java怎么打开压缩文件_Java 中 解压缩文件 ZIP

传入一组文件,将文件列表打包为ZIP文件,传入ZIP文件将文件解压缩到一个指定文件夹,下面是这个实例的实现

使用到了ANT的工具类,所以要引入ant.jar文件到工程中

对于压缩建立一个工具类:

package com.xidian.commmon;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.util.zip.ZipOutputStream;

import org.apache.tools.zip.ZipEntry;

/**

* ZIP操作工具类

* @说明 注意引入ant.jar文件

* @author cuisuqiang

* @version 1.0

* @since

*/

public class Zip {

/**

* 压缩文件列表到某ZIP文件

* @param zipFilename 要压缩到的ZIP文件

* @param paths 文件列表,多参数

* @throws Exception

*/

public static void compress(String zipFilename, String... paths)

throws Exception {

compress(new FileOutputStream(zipFilename), paths);

}

/**

* 压缩文件列表到输出流

* @param os 要压缩到的流

* @param paths 文件列表,多参数

* @throws Exception

*/

public static void compress(OutputStream os, String... paths)

throws Exception {

ZipOutputStream zos = new ZipOutputStream(os);

for (String path : paths) {

if (path.equals(""))

continue;

java.io.File file = new java.io.File(path);

if (file.exists()) {

if (file.isDirectory()) {

zipDirectory(zos, file.getPath(), file.getName()

+ File.separator);

} else {

zipFile(zos, file.getPath(), "");

}

}

}

zos.close();

}

private static void zipDirectory(ZipOutputStream zos, String dirName,

String basePath) throws Exception {

File dir = new File(dirName);

if (dir.exists()) {

File files[] = dir.listFiles();

if (files.length > 0) {

for (File file : files) {

if (file.isDirectory()) {

zipDirectory(zos, file.getPath(), basePath

+ file.getName().substring(

file.getName().lastIndexOf(

File.separator) + 1)

+ File.separator);

} else

zipFile(zos, file.getPath(), basePath);

}

} else {

ZipEntry ze = new ZipEntry(basePath);

zos.putNextEntry(ze);

}

}

}

private static void zipFile(ZipOutputStream zos, String filename,

String basePath) throws Exception {

File file = new File(filename);

if (file.exists()) {

FileInputStream fis = new FileInputStream(filename);

ZipEntry ze = new ZipEntry(basePath + file.getName());

zos.putNextEntry(ze);

byte[] buffer = new byte[8192];

int count = 0;

while ((count = fis.read(buffer)) > 0) {

zos.write(buffer, 0, count);

}

fis.close();

}

}

}

String... paths 是传入的文件列表,输出流可以穿文件流也可以传文件路径名称

压缩一组文件:

package com.xidian.test;

import java.io.FileOutputStream;

import com.xidian.commmon.Zip;

/**

* 压缩文件

* @说明

* @author cuisuqiang

* @version 1.0

* @since

*/

public class TestCompress {

public static void main(String[] args) {

// 要压缩的文件列表

String path01 = "C:\\a";

String path02 = "C:\\test.txt";

try {

FileOutputStream os = new FileOutputStream("C:\\a.zip"); // 输出的ZIP文件流

Zip.compress(os, path01, path02);

} catch (Exception e) {

e.printStackTrace();

}

}

}

由于已经写了工具类,调用看起来非常清晰

解压这个压缩包:

package com.xidian.test;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

/**

* 解压缩测试

* @说明

* @author cuisuqiang

* @version 1.0

* @since

*/

public class EctractZip {

@SuppressWarnings( { "unchecked", "static-access" })

public static void main(String[] args) {

EctractZip z = new EctractZip();

ArrayList a = z.Ectract("C:\\a.zip", "C:\\tmp\\"); // 返回解压缩出来的文件列表

for(String s : a){

System.out.println(s);

}

}

/**

* 解压缩

* @param sZipPathFile 要解压的文件

* @param sDestPath 解压到某文件夹

* @return

*/

@SuppressWarnings("unchecked")

public static ArrayList Ectract(String sZipPathFile, String sDestPath) {

ArrayList allFileName = new ArrayList();

try {

// 先指定压缩档的位置和档名,建立FileInputStream对象

FileInputStream fins = new FileInputStream(sZipPathFile);

// 将fins传入ZipInputStream中

ZipInputStream zins = new ZipInputStream(fins);

ZipEntry ze = null;

byte[] ch = new byte[256];

while ((ze = zins.getNextEntry()) != null) {

File zfile = new File(sDestPath + ze.getName());

File fpath = new File(zfile.getParentFile().getPath());

if (ze.isDirectory()) {

if (!zfile.exists())

zfile.mkdirs();

zins.closeEntry();

} else {

if (!fpath.exists())

fpath.mkdirs();

FileOutputStream fouts = new FileOutputStream(zfile);

int i;

allFileName.add(zfile.getAbsolutePath());

while ((i = zins.read(ch)) != -1)

fouts.write(ch, 0, i);

zins.closeEntry();

fouts.close();

}

}

fins.close();

zins.close();

} catch (Exception e) {

System.err.println("Extract error:" + e.getMessage());

}

return allFileName;

}

}

请您到ITEYE网站看原创,谢谢!

解压其实非常简单,因为JDK 中有一个ZipInputStream对象,只需要使用他为我们服务即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值