關于java解壓縮文件(rar或者zip)的實現示例
注意:需要用到第三方jar包ant-1.6.5.jar,實際用到的是其中的zip下類。
代碼如下:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * <p> * Title: 解壓縮文件 * </p> * <p> * Description: 通過apache的zip工具實現解壓縮 * </p> * <p> * Copyright: Copyright (c) 2010 * </p> * <p> * Company: yourcompany * </p> * * @author yourcompany * @version 1.0 */ public class CompressFile { private static CompressFile instance = new CompressFile(); private CompressFile() { } public static CompressFile getInstance() { return instance; } /** * 壓縮文件或者文件目錄到指定的zip或者rar包 * * @param inputFilename * 要壓縮的文件或者文件夾,如果是文件夾的話,會將文件夾下的所有文件包含子文件夾的內容進行壓縮 * @param zipFilename * 生成的zip或者rar文件的名稱 */ public synchronized void zip(String inputFilename, String zipFilename) throws IOException { zip(new File(inputFilename), zipFilename); } /** * 壓縮文件或者文件目錄到指定的zip或者rar包,內部調用 * * @param inputFile * 參數為文件類型的要壓縮的文件或者文件夾 * @param zipFilename * 生成的zip或者rar文件的名稱 * @return void */ private synchronized void zip(File inputFile, String zipFilename) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFilename)); try { zip(inputFile, out, ""); } catch (IOException e) { throw e; } finally { out.close(); } } /** * 壓縮文件或者文件目錄到指定的zip或者rar包 * * @param inputFile * 參數為文件類型的要壓縮的文件或者文件夾 * @param out * 輸出流 * @param base * 基文件夾 * @return void */ private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException { if (inputFile.isDirectory()) { File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < inputFiles.length; i++) { zip(inputFiles[i], out, base + inputFiles[i].getName()); } } else { if (base.length() > 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { in.close(); } } } /** * 解壓zip或者rar包的內容到指定的目錄下,可以處理其文件夾下包含子文件夾的情況 * * @param zipFilename * 要解壓的zip或者rar包文件 * @param outputDirectory * 解壓后存放的目錄 */ public synchronized void unzip(String zipFilename, String outputDirectory) throws IOException { File outFile = new File(outputDirectory); if (!outFile.exists()) { outFile.mkdirs(); } ZipFile zipFile = new ZipFile(zipFilename); Enumeration en = zipFile.getEntries(); ZipEntry zipEntry = null; while (en.hasMoreElements()) { zipEntry = (ZipEntry) en.nextElement(); if (zipEntry.isDirectory()) { // mkdir directory String dirName = zipEntry.getName(); // System.out.println("=dirName is:=" + dirName + "=end="); dirName = dirName.substring(0, dirName.length() - 1); File f = new File(outFile.getPath() + File.separator + dirName); f.mkdirs(); } else { // unzip file String strFilePath = outFile.getPath() + File.separator + zipEntry.getName(); File f = new File(strFilePath); // the codes remedified by can_do on 2010-07-02 =begin= // /////begin///// // 判斷文件不存在的話,就創建該文件所在文件夾的目錄 if (!f.exists()) { String[] arrFolderName = zipEntry.getName().split("/"); String strRealFolder = ""; for (int i = 0; i < (arrFolderName.length - 1); i++) { strRealFolder += arrFolderName[i] + File.separator; } strRealFolder = outFile.getPath() + File.separator + strRealFolder; File tempDir = new File(strRealFolder); // 此處使用.mkdirs()方法,而不能用.mkdir() tempDir.mkdirs(); } // /////end/// // the codes remedified by can_do on 2010-07-02 =end= f.createNewFile(); InputStream in = zipFile.getInputStream(zipEntry); FileOutputStream out = new FileOutputStream(f); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } // out.flush(); } catch (IOException e) { throw e; } finally { out.close(); in.close(); } } } } private static final int BUFFEREDSIZE = 1024; public static void main(String[] args) { CompressFile bean = new CompressFile(); try { boolean isZip = false; if (isZip) { bean.zip("E:\\20100707", "d:/test_rar.zip"); } else { bean.unzip("d:/test_rar.zip", "D:/temp"); } } catch (IOException e) { e.printStackTrace(); } } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!