java解压rar以及zip
程序员文章站
2022-04-02 19:25:01
...
/** * 解压缩zip包 * * @param zipFilePath zip文件路径 * @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下 * @throws IOException * @author yayagepei * @date 2008-9-28 */ public String unZip(String zipFilePath, String targetPath) throws IOException { OutputStream os = null; InputStream is = null; ZipFile zipFile = null; String resultPath = null; try { zipFile = new ZipFile(zipFilePath,"GBK"); String directoryPath = ""; if (null == targetPath || "".equals(targetPath)) { directoryPath = zipFilePath.substring(0, zipFilePath.lastIndexOf(".")); } else { directoryPath = targetPath; } Enumeration<ZipEntry> entryEnum = zipFile.getEntries(); if (null != entryEnum) { ZipEntry zipEntry = null; while (entryEnum.hasMoreElements()) { zipEntry = (ZipEntry) entryEnum.nextElement(); if (zipEntry.isDirectory()) { continue; } if (zipEntry.getSize() > 0) { // 文件 File targetFile = buildFile(directoryPath + File.separator + zipEntry.getName(), false); if (zipEntry.getName().contains("webapps") && "index.html".equals(targetFile.getName())) { resultPath = targetFile.getAbsolutePath(); } os = new BufferedOutputStream(new FileOutputStream(targetFile)); is = zipFile.getInputStream(zipEntry); byte[] buffer = new byte[4096]; int readLen = 0; while ((readLen = is.read(buffer, 0, 4096)) >= 0) { os.write(buffer, 0, readLen); } os.flush(); os.close(); } else { } } } } catch (IOException ex) { throw ex; } finally { if (null != zipFile) { zipFile = null; } if (null != is) { is.close(); } if (null != os) { os.close(); } } return resultPath; } /** * 解压rar格式压缩包。 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar */ public String unrar(String sourceRar, String destDir) throws Exception { String resultPath = null; Archive a = null; FileOutputStream fos = null; try { a = new Archive(new File(sourceRar)); if (null == destDir || "".equals(destDir)) { destDir = a.getFile().getParentFile().getAbsolutePath(); } FileHeader fh = a.nextFileHeader(); while (fh != null) { if (!fh.isDirectory()) { // 1 根据不同的操作系统拿到相应的 destDirName 和 destFileName String compressFileName = ""; if (fh.isUnicode()) { compressFileName = fh.getFileNameW().trim(); } else { compressFileName = fh.getFileNameString().trim(); } String destFileName = ""; String destDirName = ""; // 非windows系统 if (File.separator.equals("/")) { destFileName = destDir +File.separator+ compressFileName.replaceAll("\\\\", "/"); destDirName = destFileName.substring(0, destFileName.lastIndexOf("/")); // windows系统 } else { destFileName = destDir + compressFileName.replaceAll("/", "\\\\"); destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\")); } // 2创建文件夹 File dir = new File(destDirName); if (!dir.exists() || !dir.isDirectory()) { dir.mkdirs(); } File destFile=new File(destFileName); // 3解压缩文件 fos = new FileOutputStream(destFile); if ("index.html".equals(destFile.getName())) { resultPath = 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(); } } } return resultPath; } /** * 生产文件 如果文件所在路径不存在则生成路径 * * @param fileName 文件名 带路径 * @param isDirectory 是否为路径 * @return * @author yayagepei * @date 2008-8-27 */ public File buildFile(String fileName, boolean isDirectory) { File target = new File(fileName); if (isDirectory) { target.mkdirs(); } else { if (!target.getParentFile().exists()) { target.getParentFile().mkdirs(); if (target.exists()) { target.delete(); } target = new File(target.getAbsolutePath()); } } return target; }
上一篇: 用了iframe后,有2个滚动条的问题