准备工作
ZIP文件解压:需引入ant.jar包,RAR文件解压:需引入junrar.jar包。
引入途径有二:
- 到Maven Repository下载jar包引入项目中;
- 在Maven项目的pom.xml文件的dependencies中添加如下内容引入jar包,
<!-- https://mvnrepository.com/artifact/ant/ant -->
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.6.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.junrar/junrar -->
<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>4.0.0</version>
</dependency>
解压方法
package com.example.tool;
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
* ZIP/RAR压缩文件解压
*
*/
public class FileUtils {
/**
* 解压ZIP压缩文件到指定路径
* @param zipFile ZIP压缩文件
* @param dstDir 解压到的文件夹路径
* @author isea533
*/
public static void unZipFiles(File zipFile, String dstDir)throws IOException {
File dstDiretory = new File(dstDir);
if(!dstDiretory.exists()){
dstDiretory.mkdirs();
}
try {
ZipFile zip = new ZipFile(zipFile);
for(Enumeration enumeration = zip.getEntries(); enumeration.hasMoreElements();){
ZipEntry entry = (ZipEntry)enumeration.nextElement();
String zipEntryName = entry.getName();
String path = (dstDir + File.separator + zipEntryName).replace("/", File.separator);
if (entry.isDirectory()){
File dir = new File(path);
if (!dir.exists()){
dir.mkdirs();
}
}else {
InputStream in = zip.getInputStream(entry);
OutputStream out = new FileOutputStream(path);
byte[] buf1 = new byte[1024];
int len;
while((len=in.read(buf1))>0){
out.write(buf1,0,len);
}
in.close();
out.close();
}
}
zip.close();//关闭zip,否则zip会被一直占用而删不掉
}catch (Exception e){
throw e;
}
}
/**
* 解压RAR压缩文件到指定路径
* @param rarFile RAR压缩文件
* @param dstDir 解压到的文件夹路径
*/
public static void unRarFile(File rarFile, String dstDir) throws Exception {
File dstDiretory = new File(dstDir);
if (!dstDiretory.exists()) {
dstDiretory.mkdirs();
}
try {
Archive archive = new Archive(new FileInputStream(rarFile));
List<FileHeader> fileHeaders = archive.getFileHeaders();
for (FileHeader fileHeader : fileHeaders) {
if (fileHeader.isDirectory()) {
File dir = new File(dstDir + File.separator + fileHeader.getFileNameString());
if (!dir.exists()){
dir.mkdirs();
}
} else {
File file = new File(dstDir + File.separator + fileHeader.getFileNameString().trim());
try {
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
FileOutputStream os = new FileOutputStream(file);
archive.extractFile(fileHeader, os);
os.close();
} catch (Exception ex) {
throw ex;
}
}
}
archive.close();
} catch (Exception e) {
throw e;
}
}
/**
* 获取文件夹下的所有文件
* @param descDir 文件夹路径
* @return
*/
public static List<File> getAllFileOfDir(String dstDir) {
List<File> fileList = new ArrayList<>();
File folder = new File(dstDir);
if (!folder.exists()){
folder.mkdirs();
}
File[] files = folder.listFiles();
for (File file : files) {
if (file.isDirectory()){
getAllFileOfDir(file.getAbsolutePath());
}else {
fileList.add(file);
}
}
return fileList;
}
}