1、引入依赖
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>java-unrar</artifactId>
<version>1.7.0-8</version>
</dependency>
<dependency>
<groupId>net.sf.sevenzipjbinding</groupId>
<artifactId>sevenzipjbinding</artifactId>
<version>16.02-2.01</version>
</dependency>
<dependency>
<groupId>net.sf.sevenzipjbinding</groupId>
<artifactId>sevenzipjbinding-all-platforms</artifactId>
<version>16.02-2.01</version>
</dependency>
2、解压方法代码
public class FileUtils {
public static List<String> unRar(String rarPath, String dstDirectoryPath) throws IOException {
IInArchive archive;
RandomAccessFile randomAccessFile = new RandomAccessFile(rarPath, "r");
;
archive = SevenZip.openInArchive(null,
new RandomAccessFileInStream(randomAccessFile));
int[] in = new int[archive.getNumberOfItems()];
for (int i = 0; i < in.length; i++) {
in[i] = i;
}
archive.extract(in, false, new ExtractCallback(archive, dstDirectoryPath));
archive.close();
randomAccessFile.close();
log.info("rar文件电子回单解压目标文件夹为:{}", dstDirectoryPath);
return null;
}
public static List<String> getAllFile(String directoryPath, boolean isAddDirectory) {
List<String> list = new ArrayList<>();
File baseFile = new File(directoryPath);
if (baseFile.isFile() || !baseFile.exists()) {
return list;
}
File[] files = baseFile.listFiles();
if (ArrayUtil.isEmpty(files)) {
return new ArrayList<>(0);
}
for (File file : files) {
if (file.isDirectory()) {
if (isAddDirectory) {
list.add(file.getAbsolutePath());
}
list.addAll(getAllFile(file.getAbsolutePath(), isAddDirectory));
} else {
list.add(file.getAbsolutePath());
}
}
return list;
}
}
3、将解压方法封装到工具类中
if (folderFile.getName().endsWith(".rar") || folderFile.getName().endsWith(".RAR")) {
try {
FileUtils.unRar(terminalFilePath + "/" + folderFile.getName(), terminalFilePath);
} catch (Exception e) {
throw new DataHandleException("rar 文件解压失败");
}
}