java解压缩包
程序员文章站
2022-04-02 19:24:37
...
import java.io.File; import java.io.FileOutputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expand; import de.innosystec.unrar.Archive; import de.innosystec.unrar.rarfile.FileHeader; public class Decompression { public static void main(String[] args) { try { Decompression.deCompress("E:\\工作区\\kettle demo.rar", "E:\\"); } catch (Exception e) { e.printStackTrace(); } } /** * 解压zip格式压缩包,对应的是ant.jar */ private static void unzip(String sourceZip, String destDir) throws Exception { try { Project p = new Project(); Expand e = new Expand(); e.setProject(p); e.setSrc(new File(sourceZip)); e.setOverwrite(false); e.setDest(new File(destDir)); /* * ant下的zip工具默认压缩编码为UTF-8编码, 而winRAR软件压缩是用的windows默认的GBK或者GB2312编码 * 所以解压缩时要制定编码格式 */ e.setEncoding("gbk"); e.execute(); } catch (Exception e) { throw e; } } /** * 解压rar格式压缩包。 * 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar */ private static void unrar(String sourceRar, String destDir) throws Exception { Archive a = null; FileOutputStream fos = null; try { a = new Archive(new File(sourceRar)); FileHeader fh = a.nextFileHeader(); while (fh != null) { if (!fh.isDirectory()) { // 1 根据不同的操作系统拿到相应的 destDirName 和 destFileName String fileName = fh.getFileNameW().trim(); if (!existZH(fileName)) { fileName = fh.getFileNameString().trim(); } String destFileName = ""; String destDirName = ""; // 非windows系统 if (File.separator.equals("/")) { destFileName = destDir + fileName.replaceAll("\\\\", "/"); destDirName = destFileName.substring(0, destFileName.lastIndexOf("/")); // windows系统 } else { destFileName = destDir + fileName.replaceAll("/", "\\\\"); destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\")); } // 2创建文件夹 File dir = new File(destDirName); if (!dir.exists() || !dir.isDirectory()) { dir.mkdirs(); } // 3解压缩文件 fos = new FileOutputStream(new File(destFileName)); a.extractFile(fh, fos); fos.close(); fos = null; } fh = a.nextFileHeader(); } a.close(); a = null; } catch (Exception e) { throw e; } finally { if (fos != null) { try { fos.close(); fos = null; } catch (Exception e) { e.printStackTrace(); } } if (a != null) { try { a.close(); a = null; } catch (Exception e) { e.printStackTrace(); } } } } /** * 解压缩 */ public static void deCompress(String sourceFile, String destDir) throws Exception { // 保证文件夹路径最后是"/"或者"\" char lastChar = destDir.charAt(destDir.length() - 1); if (lastChar != '/' && lastChar != '\\') { destDir += File.separator; } // 根据类型,进行相应的解压缩 String type = sourceFile.substring(sourceFile.lastIndexOf(".") + 1); if (type.equals("zip")) { Decompression.unzip(sourceFile, destDir); } else if (type.equals("rar")) { Decompression.unrar(sourceFile, destDir); } else { throw new Exception("只支持zip和rar格式的压缩包!"); } } public static boolean existZH(String str) { String regEx = "[\\u4e00-\\u9fa5]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); while (m.find()) { return true; } return false; } }
上一篇: Linux 下也可以使用RAR了
下一篇: ubuntu解压rar文件