zip壓縮檔案處理方案 Zip4j壓縮和解壓

2021-08-28 20:15:34 字數 3618 閱讀 7161

主要特性

使用

zip4j預設採用utf-8編碼,支援中文,也支援密碼和多種壓縮演算法,可以說是功能強大,只是簡單的解壓檔案,按照下面幾步

public static void upzip(file zipfile,string dest,string password) 

file destfile = new file(dest);//解壓目錄

if(destfile.isdirectory()&&!destfile.exists())

if(zfile.isencrypted())

zfile.extractall(dest);//將檔案輸出到目標目錄

} catch (exception e)

}

注意,如果解壓的檔案中檔名包含中文,一定要設定檔名字符集編碼

zfile.setfilenamecharset("gbk");
對檔名編碼字符集方法的呼叫一定要靠前,必須在isvalidzipfile方法前呼叫,因為isvalidzipfile方法的呼叫,會去設定檔名的編碼

zfile.isvalidzipfile()
zipmodel = headerreader.readallheaders(this.filenamecharset);
壓縮和解壓

public class compressutil 

file destfile = new file(dest);// 解壓目錄

if (destfile.isdirectory() && !destfile.exists())

if (zfile.isencrypted())

zfile.extractall(dest);

} catch (exception e)

} /**

* 返回的是解壓後的檔案陣列

* * @param zipfile 壓縮檔案路徑

* @param desc 解壓後檔案的存放路徑

* @param passwd 密碼

* @param charset 檔名稱編碼

* @return

*/public static file getfilesbyunzip(file zipfile, string dest, string passwd, string charset)

file destfile = new file(dest);

if (destfile.isdirectory() && !destfile.exists())

if (zfile.isencrypted())

zfile.extractall(dest);

// 獲取檔案列表

list fileheaders = zfile.getfileheaders();

listextractfiles = new arraylist<>();

if (fileheaders != null && fileheaders.size() > 0) }}

file arr = new file[extractfiles.size()];

return extractfiles.toarray(arr);

} catch (exception e)

return null;

} /**

* 使用給定密碼壓縮指定檔案或資料夾到指定位置. dest可傳最終壓縮檔案存放的絕對路徑,也可以傳存放目錄,也可以傳null或者"".

* 如果傳null或者""則將壓縮檔案存放在當前目錄,即跟原始檔同目錄,壓縮檔案名取源檔名,以.zip為字尾;

* 如果以路徑分隔符(file.separator)結尾,則視為目錄,壓縮檔案名取源檔名,以.zip為字尾,否則視為檔名.

* @param src 要壓縮的檔案或資料夾路徑

* @param dest 壓縮檔案存放路徑

* @param iscreatedir 是否在壓縮檔案裡建立目錄,僅在壓縮檔案為目錄時有效. 如果為false,將直接壓縮目錄下檔案到壓縮檔案.

* @param passwd 壓縮使用的密碼

* @return 最終的壓縮檔案存放的絕對路徑,如果為null則說明壓縮失敗.

*/public static string zip(string src, string dest, boolean iscreatedir, string passwd)

try else

}else

} catch (zipexception e)

return dest; }

/*** 構建壓縮檔案存放路徑,如果不存在將會建立 * 傳入的可能是檔名或者目錄,也可能不傳,此方法用以轉換最終壓縮檔案的存放路徑 *

* @param srcfile 原始檔

* @param destparam 壓縮目標路徑 *

* @return 正確的壓縮檔案存放路徑

*/private static string builddestinationzipfilepath(file srcfile, string destparam) else

} else else

destparam += filename + ".zip";

}} return destparam;

} /**

* 建立壓縮檔案存放目錄

* @param destparam

*/private static void createdestdirectoryifnecessary(string destparam) else

if(file.exists())

}}

刪除

進行刪除操作前, 也要設定檔名編碼為gbk,因為如果是中文名稱的檔案,就會丟擲could not find file header for file的錯誤

刪除檔案

根據檔名稱或者fileheader刪除

public removefilefromzipfile()  else 

} catch (zipexception e)

刪除目錄

將目錄下面的檔案刪除,在刪除目錄

/**

* 刪除壓縮檔案中的檔案或者目錄

* @param file 壓縮檔案的路徑

* @param removefile 檔名或者目錄

*/public static void removedirfromzip(string file,string removefile) else

}for (int i = 0; i < removefiles.size(); i++)

//最後將目錄刪除

if(zipfile.getfileheader(removefile)!=null)

}} catch (zipexception e)

}

參考部落格:

zip壓縮檔案處理方案 Zip4j壓縮和解壓

主要特性 使用 zip4j預設採用utf 8編碼,支援中文,也支援密碼和多種壓縮演算法,可以說是功能強大,只是簡單的解壓檔案,按照下面幾步 public static void upzip file zipfile,string dest,string password file destfile ...

zip壓縮檔案(二)

普通壓縮檔案以20m大小的檔案為例 public static void main string args public static void zipfilenobuffer string zipfilepath,string sourcefilepath input.close zipout.c...

Python讀寫zip壓縮檔案

python自帶模組zipfile可以完成zip壓縮檔案的讀寫,而且使用非常方便,下面我們就來演示一下python讀寫zip檔案。下面的 給出了用python讀取zip檔案,列印出壓縮檔案裡面所有的檔案,並讀取壓縮檔案中的第乙個檔案。import zipfile z zipfile zipfile ...