java unrar压缩_Java实现对zip和rar文件的解压缩

package com.svse.test;

import java.io.File;

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 de.innosystec.unrar.Archive;

import de.innosystec.unrar.rarfile.FileHeader;

/**

* zip和rar解压缩工具类

* @author lenovo

*

*/

public class ZipAndRarTools {

/**

* 解压rar

* @param sourceRarPath 需要解压的rar文件全路径

* @param destDirPath 需要解压到的文件目录

* @throws Exception

*/

public static void unrar(String sourceRarPath, String destDirPath) throws Exception {

File sourceRar=new File(sourceRarPath);

File destDir=new File(destDirPath);

Archive archive = null;

FileOutputStream fos = null;

System.out.println("Starting 开始解压...");

try {

archive = new Archive(sourceRar);

FileHeader fh = archive.nextFileHeader();

int count = 0;

File destFileName = null;

while (fh != null) {

System.out.println((++count) + ") " + fh.getFileNameString());

String compressFileName = fh.getFileNameString().trim();

destFileName = new File(destDir.getAbsolutePath() + "/" + compressFileName);

if (fh.isDirectory()) {

if (!destFileName.exists()) {

destFileName.mkdirs();

}

fh = archive.nextFileHeader();

continue;

}

if (!destFileName.getParentFile().exists()) {

destFileName.getParentFile().mkdirs();

}

fos = new FileOutputStream(destFileName);

archive.extractFile(fh, fos);

fos.close();

fos = null;

fh = archive.nextFileHeader();

}

archive.close();

archive = null;

System.out.println("Finished 解压完成!");

} catch (Exception e) {

throw e;

} finally {

if (fos != null) {

try {

fos.close();

fos = null;

} catch (Exception e) {

}

}

if (archive != null) {

try {

archive.close();

archive = null;

} catch (Exception e) {

}

}

}

}

/**

* 解压Zip文件

* @param zipFileName 需要解压缩的文件位置

* @param descFileName 将文件解压到某个路径

* @throws IOException

*/

public static void unZip(String zipFileName,String descFileName) throws IOException

{

System.out.println("文件解压开始...");

String descFileNames=descFileName;

if(!descFileNames.endsWith(File.separator)){

descFileNames=descFileNames+File.separator;

}

try {

ZipFile zipFile=new ZipFile(zipFileName);

ZipEntry entry=null;

String entryName=null;

String descFileDir=null;

byte[] buf=new byte[4096];

int readByte=0;

@SuppressWarnings("rawtypes")

Enumeration enums=zipFile.getEntries();

while(enums.hasMoreElements()){

entry =(ZipEntry) enums.nextElement();

entryName=entry.getName();

descFileDir=descFileNames+entryName;

if(entry.isDirectory()){

new File(descFileDir).mkdir();

continue;

}else{

new File(descFileDir).getParentFile().mkdir();

}

File file=new File(descFileDir);

OutputStream os=new FileOutputStream(file);

InputStream is=zipFile.getInputStream(entry);

while((readByte=is.read(buf))!=-1){

os.write(buf, 0, readByte);

}

os.close();

is.close();

}

zipFile.close();

System.out.println("文件解压成功!");

} catch (Exception e) {

System.out.println("文件解压失败!");

e.printStackTrace();

}

}

public static void main(String[] args) throws Exception {

//ZipAndRarTools.unrar(newFile("D:\\存放资料的压缩包\\员工材料.rar"),newFile("D:\\存放资料的非压缩包\\"));

ZipAndRarTools.unZip("D:\\rarTest\\jar包和配置文件资源.zip", "D:\\rarTest");

ZipAndRarTools.unrar("D:\\rarTest\\rar压缩包.rar", "D:\\rarTest");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了ZipInputStream和ZipOutputStream类来实现zip文件解压缩压缩,同时也提供了解压缩RAR文件的开源库,如junrar等。以下是一个示例代码,演示如何使用ZipInputStream和ZipEntry来解压缩zip文件: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Unzip { public static void main(String[] args) throws IOException { String zipFilePath = "path/to/zip/file.zip"; String destDirectory = "path/to/destination/folder"; unzip(zipFilePath, destDirectory); } public static void unzip(String zipFilePath, String destDirectory) throws IOException { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { String filePath = destDirectory + File.separator + entry.getName(); if (!entry.isDirectory()) { extractFile(zipIn, filePath); } else { File dir = new File(filePath); dir.mkdir(); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); } private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); byte[] bytesIn = new byte[4096]; int read = 0; while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read); } bos.close(); } } ``` 对于RAR文件解压缩,可以使用开源库junrar: ```java import com.github.junrar.Archive; import com.github.junrar.exception.RarException; import com.github.junrar.impl.FileVolumeManager; import com.github.junrar.rarfile.FileHeader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Unrar { public static void main(String[] args) throws RarException, IOException { String rarFilePath = "path/to/rar/file.rar"; String destDirectory = "path/to/destination/folder"; unrar(rarFilePath, destDirectory); } public static void unrar(String rarFilePath, String destDirectory) throws RarException, IOException { Archive archive = new Archive(new FileVolumeManager(new File(rarFilePath))); FileHeader fileHeader = archive.nextFileHeader(); while (fileHeader != null) { String filePath = destDirectory + File.separator + fileHeader.getFileNameString().trim(); if (fileHeader.isDirectory()) { File dir = new File(filePath); dir.mkdirs(); } else { FileOutputStream fos = new FileOutputStream(new File(filePath)); archive.extractFile(fileHeader, fos); fos.close(); } fileHeader = archive.nextFileHeader(); } archive.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值