200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Zip Rar文件解压

Zip Rar文件解压

时间:2022-01-31 19:26:58

相关推荐

Zip Rar文件解压

一、ZIP文件解压

借用第三方工具解压Zip4J, Zip4J是一个开源的 Java 处理 zip 压缩文件的开发包。Zip4J功能比较完备,这里只用了简单的解压

1.导入依赖

<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version></dependency>

废话不多,直接上代码:

/*** @param savePath 解压文件保存路径* @param savefile zip文件路径* @return*/public static File unZipFiles(String savePath, File savefile) {File file = null;try {ZipFile zipFile = new ZipFile(savefile);// zipFile.setFileNameCharset("GBK");//解压出来的文件存在savePath下的文件(时间戳为文件名)String str = savePath + File.separator + System.currentTimeMillis();zipFile.extractAll(str);//获取其file对象file = new File(str);//遍历path下的文件和目录,放在File数组中} catch (Exception e) {logger.error("zip解压异常{}", e);} finally {// 删除下载到本地的文件if (null != savefile) {if (savefile.exists() && savefile.isFile()) {if (savefile.delete()) {logger.info("删除文件 成功!");} else {logger.info("删除文件 失败!");}} else {logger.info("文件不存在!");}}}return file;}

二、RAR文件解压

借用第三方工具解压JUnRar,JUnRar是一个采用纯Java实现的rar文件压缩和解压缩的开源类库

1.导入依赖

<dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>0.7</version></dependency>

废话不多,直接上代码:

/*** 解压rar文件** @param savePath 解压文件保存路径* @param savefile rar文件路径* @return*/public static File unRarFiles(String savePath, File savefile) {File file = null;try (Archive archive = new Archive(savefile)) {if (null != archive) {FileHeader fileHeader = archive.nextFileHeader();while (null != fileHeader) {// 防止文件名中文乱码问题的处理String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();if (fileHeader.isDirectory()) {//是文件夹file = new File(savePath + File.separator + fileName);file.mkdirs();} else {//不是文件夹file = new File(savePath + File.separator + fileName.trim());if (!file.exists()) {if (!file.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录.file.getParentFile().mkdirs();}file.createNewFile();}FileOutputStream os = new FileOutputStream(file);archive.extractFile(fileHeader, os);os.close();}fileHeader = archive.nextFileHeader();}}} catch (Exception e) {logger.error("unpack rar file fail....", e.getMessage(), e);} finally {// 删除下载到本地的文件if (null != savefile) {if (savefile.exists() && savefile.isFile()) {if (savefile.delete()) {logger.info("删除文件 成功!");} else {logger.info("删除文件 失败!");}} else {logger.info("文件不存在!");}}}return file;}

RAR解压分5.0之前和5.0之后的版本,5.0之前的版本,可以通过代码实现解压,WinRAR5之后,在rar格式的基础上,推出了另一种rar,叫RAR5,而java-unrar解析不了这种格式,目前官方也没有实现代码解压

解决方案:调用系统的rar解压工具解压

window、Linux版本解压,可以使用WinRAR.exe文件解压

/*** 采用命令行方式解压文件** @param zipFile 压缩文件* @param destDir 解压结果路径* @return*/public static File realExtract(File zipFile, String destDir) {// 解决路径中存在/..格式的路径问题destDir = new File(destDir).getAbsoluteFile().getAbsolutePath();while (destDir.contains("..")) {String[] sepList = destDir.split("\\\\");destDir = "";for (int i = 0; i < sepList.length; i++) {if (!"..".equals(sepList[i]) && i < sepList.length - 1 && "..".equals(sepList[i + 1])) {i++;} else {destDir += sepList[i] + File.separator;}}}destDir = destDir + File.separator + System.currentTimeMillis();File f = new File(destDir);if (!f.exists()) {f.mkdirs();}// 区分操作系统String winrarPath = " ";String os = System.getProperty("os.name").toLowerCase();System.out.println("os:" + os);String cmd = winrarPath + " rar X -o+ " + zipFile + " " + destDir;if (null == os || os.indexOf("linux") < 0) {// winrarPath = "C:/Program Files (x86)/WinRAR/WinRAR.exe";winrarPath = "C:/Program Files/WinRAR/WinRAR.exe";cmd = winrarPath + " X -o+ " + zipFile + " " + destDir;}boolean bool = false;if (!zipFile.exists()) {logger.info("压缩文件不存在");}// 开始调用命令行解压,参数-o+是表示覆盖的意思logger.info("cmd命令:===> {}", cmd);try {Process proc = Runtime.getRuntime().exec(cmd);if (proc.waitFor() != 0) {if (proc.exitValue() == 0) {bool = false;}} else {bool = true;}} catch (Exception e) {e.printStackTrace();logger.error("异常:===> {}", e);} finally {// 删除下载到本地的文件if (null != zipFile) {if (zipFile.exists() && zipFile.isFile()) {if (zipFile.delete()) {logger.info("删除文件 成功!");} else {logger.info("删除文件 失败!");}} else {logger.info("文件不存在!");}}}logger.info("解压" + (bool ? "成功" : "失败"));return new File(destDir);}

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