Java實現Zip壓縮與解壓(解決中文亂碼問題)
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.util.ArrayList;
-
import java.util.Enumeration;
- import java.util.List;
- import org.apache.tools.zip.ZipEntry;
- import org.apache.tools.zip.ZipFile;
- import org.apache.tools.zip.ZipOutputStream;
- publicclass ZipUtil {
- private String comment = "";
- publicvoid setComment(String comment) {
-
this.comment = comment;
- }
- publicvoid zip(String src, String dest, List filter) throws Exception {
- ZipOutputStream out = new ZipOutputStream(new FileOutputStream(dest));
- File srcFile = new File(src);
- zip(out,srcFile,"",filter);
- out.close();
- }
-
public
- if(srcFile.exists()==false) {
- thrownew Exception("壓縮目錄不存在!");
- }
- if(srcFile.isDirectory()) {
- File[] files = srcFile.listFiles();
- base = base.length() == 0 ? "" : base + "/";
- if (isExist(base, filter)) {
- out.putNextEntry(new ZipEntry(base));
- }
- for(int i=0; i<files.length; i++) {
- zip(out,files[i],base + files[i].getName(),filter);
- }
- } else {
- if (isExist(base, filter)) {
- base = base.length() == 0 ? srcFile.getName() : base ;
- ZipEntry zipEntry = new ZipEntry(base);
- zipEntry.setComment(comment);
- out.putNextEntry(zipEntry);
- FileInputStream in = new FileInputStream(srcFile);
- int length = 0;
- byte[] b = newbyte[1024];
- while((length=in.read(b,0,1024))!=-1) {
- out.write(b,0,length);
- }
- in.close();
- }
- }
- }
- publicboolean isExist(String base, List list) {
- if (list != null && !list.isEmpty()) {
- for (int i = 0; i < list.size(); i++) {
- if (base.indexOf((String) list.get(i)) >= 0) {
- returntrue;
- }
- }
- }
- returnfalse;
- }
- publicvoid unZip(String srcFile,String dest,boolean deleteFile) throws Exception {
- File file = new File(srcFile);
- if(!file.exists()) {
- thrownew Exception("解壓檔案不存在!");
- }
- ZipFile zipFile = new ZipFile(file,"GB2312");
- Enumeration e = zipFile.getEntries();
- while(e.hasMoreElements()) {
- ZipEntry zipEntry = (ZipEntry)e.nextElement();
- if(zipEntry.isDirectory()) {
- String name = zipEntry.getName();
- name = name.substring(0,name.length()-1);
- File f = new File(dest + name);
- f.mkdirs();
- } else {
- File f = new File(dest + zipEntry.getName());
- f.getParentFile().mkdirs();
- f.createNewFile();
- InputStream is = zipFile.getInputStream(zipEntry);
- FileOutputStream fos = new FileOutputStream(f);
- int length = 0;
- byte[] b = newbyte[1024];
- while((length=is.read(b, 0, 1024))!=-1) {
- fos.write(b, 0, length);
- }
- is.close();
- fos.close();
- }
- }
- if (zipFile != null) {
- zipFile.close();
- }
- if(deleteFile) {
- file.deleteOnExit();
- }
- }
- publicstatic String getZipComment(String srcFile) {
- String comment = "";
- try {
- ZipFile zipFile = new ZipFile(srcFile);
- Enumeration e = zipFile.getEntries();
- while (e.hasMoreElements()) {
- ZipEntry ze = (ZipEntry) e.nextElement();
- comment = ze.getComment();
- if (comment != null && !comment.equals("")
- && !comment.equals("null")) {
- break;
- }
- }
- zipFile.close();
- } catch (Exception e) {
- System.out.println("獲取zip檔案註釋資訊失敗:" + e.getMessage());
- }
- return comment;
- }
- publicstaticvoid main(String[] args) throws Exception {
- long begin = System.currentTimeMillis();
- ZipUtil zu = new ZipUtil();
- List<String> filter = new ArrayList<String>();
- filter.add("3RDPARTY");
- filter.add("BANNER.GIF");
- zu.setComment("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
- zu.zip("C:/VALUEADD", "c:/hh.zip",filter);
- System.out.println(ZipUtil.getZipComment("c:/hh.zip"));
- //new ZipUtil().unZip("c:/tt.zip", "c:/mmmmmmmmmmmmmmmmmmm/", true);
- //File f = new File("c:/hh.zip");
- //f.deleteOnExit();
- long end = System.currentTimeMillis();
- System.out.println(end-begin);
- }
- }
- 如果不需要上面的filter,可以新增fileter為空list或者用下面的程式:
- 不帶filter的zip壓縮:
- //
- // * @author WeiMiao
- // * @param out: ZipOutputStream
- // * @param srcFile: 要壓縮的目錄
- // * @param base: 根路徑
- // * @throws Exception
- //
- publicstaticvoid zip(ZipOutputStream out, File srcFile, String base) throws Exception {
-
相關推薦
Java實現Zip壓縮與解壓(解決中文亂碼問題)
解決中文壓縮與解壓問題 使用的是org.apache.tools.zip包下面的相關類 下面是自己寫的類,可以設定和獲取Zip檔案的註釋資訊 Java程式碼 [java] view plaincopyprint? import java
Java實現檔案壓縮與解壓
Java實現ZIP的解壓與壓縮功能基本都是使用了Java的多肽和遞迴技術,可以對單個檔案和任意級聯資料夾進行壓縮和解壓,對於一些初學者來說是個很不錯的例項。 zip扮演著歸檔和壓縮兩個角色;gzip並不將檔案歸檔,僅只是對單個檔案進行壓縮,所以,在UNIX平
用Huffman樹實現檔案壓縮與解壓
用Huffman樹實現檔案的壓縮與解壓 我們先來了解一下什麼是Huffman樹? 我們平常所使用的Zip等壓縮工具都是藉助Huffman樹實現的,Huffman是一種特殊的二叉樹,它是一種加權路徑最短的二叉樹, 因此也稱為最優二叉樹。 (下面用一
unity-zip壓縮與解壓
前一段時間在實現unity動態熱更新的時候,開始研究下了unity的zip壓縮與解壓縮的實現,這個過程中共發現三種壓縮與解壓縮的技術,分別是: 1、LZMA壓縮與解壓縮(相關地址:http://www.xuanyusong.com/archives/3095) 這種
檔案操作工具類: 檔案/目錄的建立、刪除、移動、複製、zip壓縮與解壓.
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import jav
文件操作工具類: 文件/目錄的創建、刪除、移動、復制、zip壓縮與解壓.
edi dsw 論文 acc buffer rename exe false 文件路徑 FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import
檔案操作工具類: 檔案/目錄的建立、刪除、移動、複製、zip壓縮與解壓
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File;
簡單的Zip壓縮與解壓
package demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ja
java實現對zip、tar、gzip(gz)的壓縮與解壓
以下是一個工具類: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream;
Java實現壓縮與解壓
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io
基於哈夫曼壓縮演算法的壓縮與解壓實現(Java)
如果需要對一個檔案進行壓縮,第一步是提取出檔案中的內容資訊;第二步是對其中的字元等進行統計,獲得壓縮編碼;第三步是把壓縮編碼及解壓檔案需要的資訊存入一個檔案(或者生成新檔案並存入)。這樣對檔案的壓縮就完成了。 下面就是檔案的解壓,第一步還是讀入檔案,即從前面生
指令篇:文件與文件系統的壓縮與解壓與打包(歸檔)與解壓___gzip、zcat;bzip2、bzcat;zip; tar
roo 壓縮命令 過時 bsp 演示 組合 localhost 打包 mov 一、文件與文件系統的壓縮: 1、單文件的四種壓縮命令: ①、Compress (過時了,不做過多說明) ②、gzip,zcat (gzip:壓縮。zcat:查看)
1078 字串壓縮與解壓 ——C++實現
題目 1078 字串壓縮與解壓 (20 分) 文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的一個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。
C++中的位移操作以實現檔案的壓縮(實現哈夫曼對檔案壓縮與解壓時做的一個小測試)
因為以前基本上沒用過位移操作,所以這裡做了一個小測試,加深了一下對位移的理解 相關概念: 因為C++中對檔案的操作常用的就是按位元組來進行讀取。下面對檔案的讀寫進行舉例(這是我常用的方式,大家也可以用其它方法讀取): 首先包含相關標頭檔案:
【C/C++】C實現gzip格式的壓縮與解壓Demo
參考連結: http://www.codeproject.com/Questions/341319/C-Decompress-Gzipped-http-response http://www.cppblog.com/woaidongmao/archive/2011/06/
huffman演算法實現檔案的壓縮與解壓
本文采用哈夫曼編碼的方式進行檔案的壓縮和解壓縮,主要原理是通過huffman編碼來表示字元,出現次數多的編碼短,出現次數少的編碼長,這樣整體而言,所需的總的bit位是減少的。但是當大部分字元出現的
Linux作業系統中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的壓縮與解壓
zip格式 壓縮: zip -r [目標檔名].zip [原檔案/目錄名] 解壓: unzip [原檔名].zip 注:-r引數代表遞迴 tar格式(該格式僅僅打包,不壓縮) 打包:tar -cvf [目標檔名].tar [原檔名/目錄名] 解包:tar -xvf [原檔名].tar
java tar.gz 格式多檔案打包壓縮與解壓
問題背景:開發中,我們時常會遇到對檔案進行儲存或傳輸的問題,但如果傳輸儲存的檔案較大,浪費磁碟空間不說,還會大大影響程式執行效率。於是便引出了這篇文章的主題,關於檔案打包與壓縮的問題。這裡“打包”是指,將多個檔案合成一個檔案;“壓縮”是指,把檔案的二進位制程式碼
java程式碼實現加密壓縮檔案解壓
package com.dashu.basicinfo.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IO
Linux 下壓縮與解壓.zip和.rar
對於Window下的常見壓縮檔案.zip和.rar,Linux也有相應的方法來解壓它們:1)對於.zip linux下提供了zip和unzip程式,zip是壓縮程式,unzip是解壓程式。它們的引數選項很多,可用命令zip -help和unzip -help檢視,這裡只做簡單介紹,舉例說明一下其用法: # z