赞
踩
警告: exception in archive constructor maybe file is encrypted or currupt
com.github.junrar.exception.RarException: badRarArchive
出现这种问题,在网上查找资料,发现,rar解压分5.0之前和5.0之后的版本,5.0之前的版本,可以通过代码实现解压,WinRAR5之后,在rar格式的基础上,推出了另一种rar,叫RAR5,而java-unrar解析不了这种格式,目前官方也没有实现代码解压
当然要先安装WinRAR软件,然后把WinRAR.exe拷贝到项目中,或者直接写WinRAR安装路径
/** * 采用命令行方式解压文件 * @param zipFile 压缩文件 * @param destDir 解压结果路径 * @param cmdPath WinRAR.exe的路径,也可以在代码中写死 * @return */ public static boolean realExtract(File zipFile, String destDir,String cmdPath) { // 解决路径中存在/..格式的路径问题 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; } } } boolean bool = false; if (!zipFile.exists()) { return false; } // 开始调用命令行解压,参数-o+是表示覆盖的意思 cmdPath = "E:\\workspace\\operation-uprr-manage\\src\\main\\resources\\cmd\\WinRAR.exe"; String cmd = cmdPath + " X -o+ " + zipFile + " " + destDir; System.out.println(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(); } System.out.println("解压" + (bool ? "成功" : "失败")); return bool; }
1.安装unrar
wget https://www.rarlab.com/rar/rarlinux-x64-5.7.0.tar.gz 下载unrar包
tar -zxf rarlinux-x64-5.7.0.tar.gz
cd rar
make
make install
安装完成unrar,安装默认路径是/usr/local/bin
里面有rar 和 unrar可执行文件
/usr/local/bin/unrar,路径写这个路径即可,调用上述方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。