1. 程式人生 > >java 壓縮檔案zip

java 壓縮檔案zip

1.引言

中介紹過對字串的壓縮和解壓,這個解壓和解決用在系統之間大資料傳輸的時候還是可以大大的減少網路流量的。本節主要本別介紹對單個檔案、多個檔案的壓縮。解壓這裡就不講了,解壓的話沒什麼實際意義,因為檔案壓縮後為zip格式的檔案,現在windows系統解壓這個格式的檔案真是特多了。我個人認為這個壓縮檔案的功能在以下場景使用就比較合理:比如某執行的系統,在每天或者每週的固定時間會匯出一批報表,如果我們不對匯出的報表進行壓縮,那麼磁碟空間會大幅度的增加,如果我們對匯出的檔案進行壓縮,那麼磁碟空間的開銷就會大大節省。

2.檔案壓縮的中文問題

中文,一直是個頭疼的問題,同樣,在這裡我們對檔案壓縮也會出現中文亂碼問題。對壓縮的檔案,如果檔名稱是中文,壓縮完成後,可以看到壓縮包中的檔名稱是亂碼(檔案的內容有中文,壓縮後不會出現中文亂碼問題),對於這種情況我們只要用ANT中的ant.jar中的類就可以解決此問題。壓縮過程中會用到ZipEntry和ZipOutputStream類,如果我採用第一種方式,這樣就會出現中文亂碼;如果我採用第二種方式,中文亂碼問題就可以解決。檔案執行的對比效果我會在後面把截圖貼出來做一下對比。

第一種方式

import Java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

以上採用JDK API中自帶的類時壓縮的檔名會出現中文亂碼

第二種方式

import org.apache.tools.zip.ZipEntry; 
import org.apache.tools.zip.ZipOutputStream;

以上採用ANT中ant.jar包的類可以解決壓縮的檔名的中文亂碼問題

3.下載jar包

對於本節我只需要一個jar包,即ant.jar,提供jar包的下載路徑如下:

4.method&class

ZipEntry:

ZipOutputStream:

5.程式碼檔案

 ZipFileUtil.java

[html] view plaincopyprint?
  1. package zip;  
  2.  import java.io.File;  
  3.  import java.io.FileInputStream;  
  4.  import java.io.FileOutputStream;  
  5.  import java.io.IOException;  
  6.  /*  
  7.   * 採用JDK API中自帶的類時壓縮的檔案會出現中文亂碼  
  8.   */  
  9.  //import java.util.zip.ZipEntry;  
  10.  //import java.util.zip.ZipOutputStream;  
  11.  /*  
  12.   * 採用ANT中ant.jar包的類可以解決中文亂碼問題  
  13.   */  
  14.  import org.apache.tools.zip.ZipEntry;  
  15.  import org.apache.tools.zip.ZipOutputStream;  
  16.  /**  
  17.   *Module:          ZipFileUtil.java  
  18.   *Description:    用zip對單個和多個檔案進行壓縮  
  19.   *Company:       xxx  
  20.   *Version:          1.0.0  
  21.   *Author:           pantp  
  22.   *Date:              May 24, 2012  
  23.   */  
  24.  public class ZipFileUtil {  
  25.      public static void main(String[] args) throws Exception {  
  26.          /*  
  27.           * 測試單個檔案的ZIP壓縮   
  28.           * 指定檔案路徑可以是絕對路徑,也可以是相對路徑  
  29.           */  
  30.          String file = "src/zip/檔案1.txt";  
  31.          String zipFile1 = "src/zip/單個檔案壓縮.zip";  
  32.          boolean flag1 = zipSingleFile(file, zipFile1);  
  33.          System.out.println("\n**************壓縮【單】個檔案<author:pantp>******************************\n");  
  34.          if (flag1) {  
  35.              System.out.println("單個檔案ZIP壓縮成功,壓縮後文件所在路徑為:"+zipFile1);  
  36.          } else {  
  37.              System.out.println("單個檔案ZIP壓縮失敗");  
  38.          }  
  39.          System.out.println("\n*******************************************************************************");  
  40.          /*  
  41.           * 測試多個檔案的ZIP壓縮  
  42.           * 指定檔案路徑可以是絕對路徑,也可以是相對路徑  
  43.           */  
  44.  /*        String files[] = { "src/zip/檔案1.txt", "src/zip/file2.txt" };  
  45.          String zipFile2 = "src/zip/多個檔案壓縮.zip";  
  46.          boolean flag2 = zipFiles(files, zipFile2);  
  47.          System.out.println("\n**************壓縮【多】個檔案<author:pantp>******************************\n");  
  48.          if (flag2) {  
  49.              System.out.println("多個檔案ZIP壓縮成功,壓縮後文件所在路徑為:"+zipFile2);  
  50.          } else {  
  51.              System.out.println("多個檔案ZIP壓縮失敗");  
  52.          }  
  53.          System.out.println("\n*******************************************************************************");  
  54.          */  
  55.      }  
  56.      /**  
  57.       *<p>
  58.       *@param  file 待壓縮檔案的名稱 例如,src/zip/檔案1.txt  
  59.       *@param  zipFile 壓縮後文件的名稱 例如,src/zip/單個檔案壓縮.zip  
  60.       *@return boolean  
  61.       *@throws :IOException  
  62.       *@Function: zipSingleFile  
  63.       *@Description:單個檔案的壓縮  
  64.       *@version : v1.0.0  
  65.       *@author: pantp  
  66.       *@Date:May 24, 2012  
  67.       *</p>
  68.       *Modification History:  
  69.       * Date                     Author          Version         Description  
  70.       * ---------------------------------------------------------------------  
  71.       * May 24, 2012        pantp           v1.0.0           Create  
  72.       */  
  73.      public static boolean zipSingleFile(String file, String zipFile)  
  74.              throws IOException {  
  75.          boolean bf = true;  
  76.          File f = new File(file);  
  77.          if (!f.exists()) {  
  78.              System.out.println("檔案不存在");  
  79. bf = false;  
  80.          } else {  
  81.              File ff = new File(zipFile);  
  82.              if (!f.exists()) {  
  83.                  ff.createNewFile();  
  84.              }  
  85.              // 建立檔案輸入流物件  
  86.              FileInputStream in = new FileInputStream(file);  
  87.              // 建立檔案輸出流物件  
  88.              FileOutputStream out = new FileOutputStream(zipFile);  
  89.              // 建立ZIP資料輸出流物件  
  90.              ZipOutputStream zipOut = new ZipOutputStream(out);  
  91.              // 得到檔名稱  
  92.              String fileName = file.substring(file.lastIndexOf('/') + 1, file.length());  
  93.              // 建立指向壓縮原始檔案的入口  
  94.              ZipEntry entry = new ZipEntry(fileName);  
  95.              zipOut.putNextEntry(entry);  
  96.              // 向壓縮檔案中輸出資料  
  97.              int number = 0;  
  98.              byte[] buffer = new byte[512];  
  99.              while ((number = in.read(buffer)) != -1) {  
  100.                  zipOut.write(buffer, 0, number);  
  101.              }  
  102.              zipOut.close();  
  103.              out.close();  
  104.              in.close();  
  105.          }  
  106.          return bf;  
  107.      }  
  108.      /**  
  109.       *<p>
  110.       *@param files    待壓縮的檔案列表 例如,src/zip/檔案1.txt, src/zip/file2.txt  
  111.       *@param zipfile 壓縮後的檔名稱 例如,src/zip/多個檔案壓縮.zip  
  112.       *@return boolean  
  113.       *@throws :Exception  
  114.       *@Function: zipFiles  
  115.       *@Description:多個檔案的ZIP壓縮  
  116.       *@version : v1.0.0  
  117.       *@author: pantp  
  118.       *@Date:May 24, 2012  
  119. 相關推薦

    java 壓縮檔案zip

    1.引言 中介紹過對字串的壓縮和解壓,這個解壓和解決用在系統之間大資料傳輸的時候還是可以大大的減少網路流量的。本節主要本別介紹對單個檔案、多個檔案的壓縮。解壓這裡就不講了,解壓的話沒什麼實際意義,因為檔案壓縮後為zip格式的檔案,現在windows系統解壓這

    Atitit 壓縮檔案zip總結 注意孔目錄 以及 遞迴目錄 /springbootUpload/src/springbootUploadPkg/ZipUtilCompressPart.java

    Atitit 壓縮檔案zip總結   注意孔目錄 以及 遞迴目錄   /springbootUpload/src/springbootUploadPkg/ZipUtilCompressPart.java   File file 

    JAVA實現檔案ZIP壓縮並解決中文檔名亂碼問題

    一、檔案壓縮的中文亂碼問題 1、中文檔名的亂碼解決 對於壓縮的檔案,當檔名稱是中文時,若使用JDK API中自帶的類(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)進行壓縮,壓縮完成後,可以看到壓縮包中的檔名

    java解析壓縮檔案.zip,獲取資料夾下的資料

    /**  * 資料包Controller  * @author cookie  * @version 2017-08-23  */ public class BudgetDateController extends BaseController {           

    java壓縮檔案

    pom依賴 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId>

    java壓縮檔案

      昨天接收同事寫的壓縮生成的資料檔案功能,發現檔名儲存成.rar ,再用java的gzip壓縮,用rar解壓的時候報不能建立對應的資料夾異常。之前以為是gzip用的有問題,後來改用zip,可還是報同一異常,最後發現時儲存的rar檔名有問題,如果檔名儲存成.txt.rar/.

    java壓縮檔案,解決中文亂碼問題!

    package TestZIP; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.tools.zip.ZipEnt

    一文教您如何通過 Java 壓縮檔案,打包一個 tar.gz Filebeat 採集器包

    歡迎關注筆者的公眾號: 小哈學Java, 專注於推送 Java 領域優質乾貨文章!! 個人網站: https://www.exception.site/essay/create-tar-gz-by-java 一、背景 最近,小哈主要在負責日誌中臺的開發工作, 等等,啥是日誌中臺? 俺只知道中臺概念

    Java ZIP壓縮和解壓縮檔案(解決中文檔名亂碼問題)

    Java ZIP壓縮和解壓縮檔案(解決中文檔名亂碼問題) Java ZIP壓縮和解壓縮檔案(解決中文檔名亂碼問題) 學習了:http://www.tuicool.com/articles/V7BBvy  引用原文: JDK中自帶的ZipOutputStream在壓縮檔

    java進行檔案壓縮ZIP

    最近需要用到壓縮,然後網上找了一些,自己又改了一些,寫一下吧,希望有用的可以做一個參考   import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import ja

    乾貨-java HDFS系統上解壓多檔案zip壓縮

    package com.zx.utils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDat

    java壓縮zip檔案中文亂碼問題

    用java來打包檔案生成壓縮檔案,有兩個地方會出現亂碼 1、內容的中文亂碼問題,這個問題網上很多人給出瞭解決方法,兩種:修改sun的原始碼;使用開源的類庫org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,這兩個類ant.ja

    JAVA-阿里雲OSS檔案下載並將檔案壓縮ZIP格式儲存

    一,引言 由於公司業務功能需求,需要從阿里雲OSS(Object Storage Service,物件儲存服務)中獲取檔案並打壓縮成ZIP格式,在這次開發中使用了OSS檔案下載相關服務,檔案壓縮功能使用的是commons-compress-x.x.jar中提供的功能。 二

    java 將資料夾壓縮zip壓縮檔案

    還記得壓縮檔案是我剛入職時,師傅讓我完成的案例,當時把我愁的哦。剛才用到,才發現忘得差不多了。哎,都是不長回頭惹的禍啊。回頭看了下 在這裡記錄下。方便自己也方便了他人麼,不足地方請各位指出呢! 其實壓縮檔案並不是太難,在這裡主要就是對IO流、ZIP的運用,挺有意思的一個案例。 現在對過程捋一

    java壓縮/壓縮/加密壓縮/加密解壓縮 ZIP4J ZIP檔案壓縮與解壓縮學習

                    最近公司準備讓各專案組提供公共工具元件,手中正好無事便研究其中一個工具 - 檔案壓縮與解壓縮工具。           目前JAVA API已提供對於ZIP檔案的壓縮與解壓縮,但網上總結不支援ZIP檔案加密與解密甚至對於中文支援也有問題,於是果斷找其他的支援加密解密的第三方包。

    java zip壓縮檔案中文檔名亂碼

        最近使用java.util.zipoutputstream發現中文名出現亂碼,一直試著使用new String(filename.getBytes("GBK"),"ISO-8859-1");還是無效。後來查閱資料,java.util.zipoutputstream無

    Java操作Zip壓縮檔案遇到的編碼問題

    Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(ZipCoder.java:58) at java.util.zip.ZipInputStr

    java 壓縮/解壓 zip 多個檔案和資料夾

    參考了幾篇文章,基本都是壓縮單個檔案或者一個資料夾,不能混合壓縮。 找了一個不需要額外jar包的程式碼上改的。(參考文章) 不需要額外jar包。 壓縮方法: import java.io.File; import java.io.FileInputStr

    java實現檔案壓縮下載----壓縮下載zip

    檔案壓縮下載 Controller層: /** *檔案壓縮下載 *billname:檔名 *filename:檔案存放路徑 */ public void downloadsource(HttpServletResponse response

    java把指定資料夾下的所有檔案壓縮zip

    <span style="font-size:18px;background-color:rgb(204,204,204);">package cn.gov.csrc.base.util; import java.io.BufferedInputStream