JAVA解压RAR和ZIP


/**
* @Title: unZipFile
* @Description: 解压ZIP文件
* @author LuRh
* @param @param zipFile
* @param @param descDir
* @param @return
* @param @throws IOException
* @return boolean
* @throws
*/
@SuppressWarnings("rawtypes")
public static boolean unZipFile(String filePath, String extractToPath) {
try {
File zipFile = new File(filePath);
File extractPath = new File(extractToPath);
if (!extractPath.exists()) {
extractPath.mkdirs();
}
ZipFile zip = new ZipFile(zipFile, "GBK");
for (Enumeration entries = zip.getEntries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (extractToPath + zipEntryName).replaceAll("\\*", "/");
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));

if (!file.exists()) {
file.mkdirs();
}

if (new File(outPath).isDirectory()) {
continue;
}
if (in != null) {
OutputStream out = new FileOutputStream(outPath);
byte[] buf = new byte[2048];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
} catch (IOException e) {
return false;
}
return true;
}

/**
* @Title: unRARFile
* @Description: 解压RAR文件
* @author LuRh
* @param @param sourceRar
* @param @param destDir
* @param @return
* @param @throws Exception
* @return boolean
* @throws
*/
public static boolean unRARFile(String filePath, String extractToPath) {
Archive archive = null;
FileOutputStream fileOutputStream = null;
try {
archive = new Archive(new File(filePath));
FileHeader fileHeader = archive.nextFileHeader();
while (fileHeader != null) {
if (!fileHeader.isDirectory()) {
String compressFileName = "";
String destFileName = "";
String destDirName = "";

if (fileHeader.isUnicode()) {
compressFileName = fileHeader.getFileNameW().trim();
} else {
compressFileName = fileHeader.getFileNameString().trim();
}

// 非windows系统
if (File.separator.equals("/")) {
destFileName = extractToPath + compressFileName.replaceAll("\\\\", "/");
destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));
// windows系统
} else {
destFileName = extractToPath + compressFileName.replaceAll("/", "\\\\");
destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));
}
File dir = new File(destDirName);

if (!dir.exists() || !dir.isDirectory()) {
dir.mkdirs();
}

fileOutputStream = new FileOutputStream(new File(destFileName));
archive.extractFile(fileHeader, fileOutputStream);
fileOutputStream.close();
fileOutputStream = null;
}
fileHeader = archive.nextFileHeader();
}
archive.close();
archive = null;
} catch (Exception e) {
return false;
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
fileOutputStream = null;
} catch (Exception e) {
e.printStackTrace();
}
}
if (archive != null) {
try {
archive.close();
archive = null;
} catch (Exception e) {
return false;
}
}
}
return true;
}
  • 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、付费专栏及课程。

余额充值