java 解压zip rar_java解压缩文件的实现示例,支持rar和zip格式

解压ZIP需要用到第三方jar包ant-1.6.5.jar,实际用到的是其中的zip下类。

解压RAR需要用用junrar-0.7.jar包。

这两个jar包的下载地址为:

csdn没有积分的,可以去百度云网盘下载:

代码如下:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipFile;

import org.apache.tools.zip.ZipOutputStream;

import com.github.junrar.Archive;

import com.github.junrar.rarfile.FileHeader;

/**

*

* Title: 解压缩文件

*

*

* Copyright: Copyright (c) 2010

*

*

* Company: yourcompany

*

*

* @author yourcompany

* @version 1.0

*/

public class CompressFile {

/**

* 压缩文件

*

* @param srcfile

*            File[] 需要压缩的文件列表

* @param zipfile

*            File 压缩后的文件

*/

public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {

byte[] buf = new byte[1024];

try {

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

zipfile));

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

FileInputStream in = new FileInputStream(srcfile[i]);

out.putNextEntry(new ZipEntry(srcfile[i].getName()));

String str = srcfile[i].getName();

int len;

while ((len = in.read(buf)) > 0) {

out.write(buf, 0, len);

}

out.closeEntry();

in.close();

}

out.close();

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

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* zip解压缩

*

* @param zipfile

*            File 需要解压缩的文件

* @param descDir

*            String 解压后的目标目录

*/

public static void unZipFiles(java.io.File zipfile, String descDir) {

try {

ZipFile zf = new ZipFile(zipfile);

for (Enumeration entries = zf.getEntries(); entries

.hasMoreElements();) {

ZipEntry entry = ((ZipEntry) entries.nextElement());

String zipEntryName = entry.getName();

InputStream in = zf.getInputStream(entry);

OutputStream out = new FileOutputStream(descDir + zipEntryName);

byte[] buf1 = new byte[1024];

int len;

while ((len = in.read(buf1)) > 0) {

out.write(buf1, 0, len);

}

in.close();

out.close();

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

}

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 根据原始rar路径,解压到指定文件夹下.

* @param srcRarPath 原始rar路径

* @param dstDirectoryPath 解压到的文件夹

*/

public static void unRarFile(String srcRarPath, String dstDirectoryPath) {

if (!srcRarPath.toLowerCase().endsWith(".rar")) {

System.out.println("非rar文件!");

return;

}

File dstDiretory = new File(dstDirectoryPath);

if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹

dstDiretory.mkdirs();

}

Archive a = null;

try {

a = new Archive(new File(srcRarPath));

if (a != null) {

a.getMainHeader().print(); // 打印文件信息.

FileHeader fh = a.nextFileHeader();

while (fh != null) {

if (fh.isDirectory()) { // 文件夹

File fol = new File(dstDirectoryPath + File.separator

+ fh.getFileNameString());

fol.mkdirs();

} else { // 文件

File out = new File(dstDirectoryPath + File.separator

+ fh.getFileNameString().trim());

//System.out.println(out.getAbsolutePath());

try {// 之所以这么写try,是因为万一这里面有了异常,不影响继续解压.

if (!out.exists()) {

if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录.

out.getParentFile().mkdirs();

}

out.createNewFile();

}

FileOutputStream os = new FileOutputStream(out);

a.extractFile(fh, os);

os.close();

} catch (Exception ex) {

ex.printStackTrace();

}

}

fh = a.nextFileHeader();

}

a.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值