700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java实现rar格式 java解压缩文件的实现示例 支持rar和zip格式

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

时间:2023-05-15 10:59:09

相关推荐

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

[ 最近有个项目需要用Java做解压缩Zip文件,由于JDK自带的zip相关的类都不支持以中文命名的文件,所以在网上搜索了些资料,自己花了点时间研究了下。希望和大家分享下

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

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

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

[ public class RarToFile { /* * cmd 压缩与解压缩命令 */ private static String rarCmd = "C:\\Program Files\\WinRAR\\Rar.exe a "; privat

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)

*

*

* 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路径,解压到指定文件夹下.

*@paramsrcRarPath原始rar路径

*@paramdstDirectoryPath解压到的文件夹

*/

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

}

}

}

[项目中要用到一个压缩解压缩的模块, 看了很多文章和源代码,都不是很称心, 现在把我自己实现的代码和大家分享.要求: 1.使用Unicode(支持中文). 2.使用源代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。