java壓縮與解壓(Java.util.zip)

ye34 9年前發布 | 6K 次閱讀 Java

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**

  • 文件解壓縮 *
  • @author Tony / public final class FileToZip {

    FileToZip() {

    }

    /**

    • 將存放在sourceFilePath目錄下的源文件,打包成fileName名稱的ZIP文件,并存放到zipFilePath。 *
    • @param sourceFilePath
    • 待壓縮的文件路徑
    • @param zipFilePath
    • 壓縮后存放路徑
    • @param fileName
    • 壓縮后文件的名稱
    • @return flag */ public static boolean fileToZip(String sourceFilePath, String zipFilePath,

                               String fileName) {
      

      boolean flag = false; File sourceFile = new File(sourceFilePath); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; ZipOutputStream zos = null;

      if (sourceFile.exists() == false) {

       System.out.println(">>>>>> 待壓縮的文件目錄:" + sourceFilePath
                          + " 不存在. <<<<<<");
      

      } else {

       try {
           File zipFile = new File(zipFilePath + "/" + fileName + ".RAR");
           //                File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
           if (zipFile.exists()) {
               System.out.println(">>>>>> " + zipFilePath + " 目錄下存在名字為:"
                                  + fileName + ".RAR" + " 打包文件. <<<<<<");
           } else {
               File[] sourceFiles = sourceFile.listFiles();
               if (null == sourceFiles || sourceFiles.length < 1) {
                   System.out.println(">>>>>> 待壓縮的文件目錄:" + sourceFilePath
                                      + " 里面不存在文件,無需壓縮. <<<<<<");
               } else {
                   fos = new FileOutputStream(zipFile);
                   zos = new ZipOutputStream(new BufferedOutputStream(fos));
                   byte[] bufs = new byte[1024 * 10];
                   for (int i = 0; i < sourceFiles.length; i++) {
                       // 創建ZIP實體,并添加進壓縮包
                       ZipEntry zipEntry = new ZipEntry(sourceFiles[i]
                                                        .getName());
                       zos.putNextEntry(zipEntry);
                       // 讀取待壓縮的文件并寫進壓縮包里
                       fis = new FileInputStream(sourceFiles[i]);
                       bis = new BufferedInputStream(fis, 1024 * 10);
                       int read = 0;
                       while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                           zos.write(bufs, 0, read);
                       }
                   }
                   flag = true;
               }
           }
       } catch (FileNotFoundException e) {
           e.printStackTrace();
           throw new RuntimeException(e);
       } catch (IOException e) {
           e.printStackTrace();
           throw new RuntimeException(e);
       } finally {
           // 關閉流
           try {
               if (null != bis)
                   bis.close();
               if (null != zos)
                   zos.close();
           } catch (IOException e) {
               e.printStackTrace();
               throw new RuntimeException(e);
           }
       }
      

      }

      return flag; }

      public static void unZip(String sourceFilePath, String unzipFilePath) { File sourceFile = new File(sourceFilePath); ZipFile zipFile = null; ZipEntry zipEntry = null; ZipInputStream zis = null; FileOutputStream fos = null; FileInputStream fis = null;

      if (sourceFile.exists() == false) {

       System.out.println(">>>>>> 待解壓的文件目錄:" + sourceFilePath
                          + " 不存在. <<<<<<");
      

      } else {

       try {
           System.out.println(">>>>>> 開始解壓:" + sourceFilePath + " <<<<<<");
           zipFile = new ZipFile(sourceFile);
           zis = new ZipInputStream(new FileInputStream(sourceFile));
           while ((zipEntry = zis.getNextEntry()) != null) {
               String fileName = zipEntry.getName();
               File temp = new File(unzipFilePath + "\\" + fileName);
               System.out.println(fileName + ">>>>>>解壓到" + unzipFilePath);
               if (!temp.getParentFile().exists()) {
                   temp.getParentFile().mkdirs();
               }
               fos = new FileOutputStream(temp);
               InputStream is = zipFile.getInputStream(zipEntry);
               int len = 0;
               while ((len = is.read()) != -1) {
                   fos.write(len);
               }
               is.close();
           }
      
       } catch (FileNotFoundException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (ZipException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } finally {
           // 關閉流
           try {
               if (null != fos)
                   fos.close();
               if (null != fis)
                   fis.close();
               if (null != zis)
                   zis.close();
           } catch (IOException e) {
               e.printStackTrace();
               throw new RuntimeException(e);
           }
       }
      

      }

      }

      /**

    • 將文件打包成ZIP壓縮文件,main方法測試 *
    • @param args */ public static void main(String[] args) { String sourceFilePath = "D:\sss\lp20120301.rar"; // String zipFilePath = "D:\sss"; // String fileName = "lp20120301"; // boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, // fileName); // if(flag) { // System.out.println(">>>>>> 文件打包成功. <<<<<<"); // } else { // System.out.println(">>>>>> 文件打包失敗. <<<<<<"); // } FileToZip.unZip(sourceFilePath, "E:\sdf"); } }</pre>
 本文由用戶 ye34 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!