java 項目總是有上傳 zip 包和下載 zip 包的需求,這時就得用 ZipInputStream 和 ZipOutputStream 類。
基礎概念
- ZipOutputStream:是一種 FilterInputStream 、裝飾器模式中的實現類,它可以直接讀取zip 包的內容
- ZipOutputStream (OutputStream out):zip 輸出流
- ZipEntry(String name):表示壓縮文件中的一個文件或者目錄
- void putNextEntry(ZipEntry e):寫入新的壓縮文件或者目錄
- ZipIutputStream:是一種 FilterOutputStream, 可以實現 zip 文件的解壓
- ZipIutputStream (IutputStream out):zip 輸入流
- ZipEntry getNextEntry():得到壓縮文件中的一個文件或者目錄
壓縮
壓縮文件就是先讀取一個文件夾的內容,創建 ZipEntry 放入 ZipOutputStream 下,然后用 InputStream 讀取源文件內容并寫入 ZipOutputStream。
/**
* 壓縮文件
* @param sourceFilePath 待壓縮的文件路徑
* @param zipFilePath 壓縮后存放路徑
* @return
*/
public static void zip(String sourceFilePath, String zipFilePath) {
File sourceFile = new File(sourceFilePath);
if (!sourceFile.exists()) {
System.out.println(sourceFilePath + " 不存在");
return;
}
File zipFile = new File(zipFilePath);
if (zipFile.exists()) {
System.out.println(zipFilePath + " 已經存在");
return;
}
try {
byte[] buffer = new byte[1024];
try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)))){
for(File file: sourceFile.listFiles()) {
// 創建 ZIP 中的文件,并添加進壓縮包
ZipEntry zipEntry = new ZipEntry(file.getName());
zos.putNextEntry(zipEntry);
// 讀取待壓縮的文件并寫進壓縮包里
try (InputStream bis = new BufferedInputStream(new FileInputStream(file))){
int read = 0;
while ((read = bis.read(buffer)) != -1) {
zos.write(buffer, 0, read);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
解壓
一個壓縮文件就是一個特殊的 File 叫做 ZipFile,用 Enumeration 類取出 zip 文件中被壓縮的文件。
List< String > fileNames=new ArrayList< >();
try{
ZipFile zipFile=new ZipFile(path, Charset.forName("gbk"));
Enumeration< ? extends ZipEntry > entries = zipFile.entries();
while(entries.hasMoreElements()){
String fileName=entries.nextElement().getName();
fileNames.add(fileName);
System.out.println("文件名稱: "+fileName);
}
}catch (Exception e){
e.printStackTrace();
}
解壓文件 就是先用 zipFile.entries() 讀取壓縮文件夾中的文件, 生成 InputStream 流后寫入被解壓的 輸出流
/**
* 解壓
* @param zipPath zip 文件夾路徑
* @param targetPath 解壓路徑
*/
public static void unzip(String zipPath,String targetPath){
File pathFile = new File(targetPath);
if(!pathFile.exists()){
pathFile.mkdirs();
}
try{
//指定編碼
try(ZipFile zipFile = new ZipFile(zipPath, Charset.forName("gbk"))) {
//遍歷里面的文件及文件夾
Enumeration entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
try (InputStream in = zipFile.getInputStream(entry)) {
String outpath = (targetPath + File.separator + zipEntryName);
//判斷路徑是否存在,不存在則創建文件路徑
File file = new File(outpath.substring(0, outpath.lastIndexOf(File.separator)));
if (!file.exists()) {
file.mkdirs();
}
//判斷文件全路徑是否為文件夾
if (new File(outpath).isDirectory())
continue;
try (OutputStream out = new FileOutputStream(outpath)) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
}
}
}
}
}catch ( Exception e){
e.printStackTrace();
}
}
總結
介紹了一下 java 中的壓縮文件是如何解壓與壓縮的,對小伙伴們有幫助的話就點個贊哦。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
JAVA
+關注
關注
19文章
2976瀏覽量
105220 -
Zip
+關注
關注
0文章
17瀏覽量
8662 -
壓縮
+關注
關注
2文章
102瀏覽量
19433 -
文件
+關注
關注
1文章
571瀏覽量
24834
發布評論請先 登錄
相關推薦
如何在Linux使用unzip命令在終端解壓縮文件
ZIP是最廣泛使用的存檔文件格式,支持無損數據壓縮。ZIP文件是一個數據容器,其中包含一個或多個壓縮文件或目錄。
發表于 12-08 16:52
?4865次閱讀
WinRAR壓縮文件我們該知道的幾個點【jiasuba】
真正做到事半功倍。1.制作自解壓文件 如果你平時使用Win7系統下載的WinRAR來壓縮文件,而你的朋友也不會使用WinRAR,但你的數據又確實必須壓縮后才能夠給他。這時,我們就可以
發表于 03-14 09:47
壓縮文件可以使用pdf壓縮器嗎
` 壓縮文件可以使用pdf壓縮器嗎?現在很多辦公人員都會編輯各種文檔格式的文件,也都掌握了將其它可編輯格式轉換為PDF文件格式的方法,但是有時候PDF
發表于 10-27 14:03
解讀Linux :先從創建一個文件夾用來存放jdk壓縮文件開始
1 創建一個文件夾用來存放jdk壓縮文件mkdir /home/test/tar2 把下載好的jdk壓縮文件上傳到linux對應目錄3 創建jdk解壓目錄mkdir /usr/loca
發表于 07-04 08:06
在 Linux 上壓縮文件的 5 種方法
在 Linux 上壓縮文件的 5 種方法 在 Linux 系統上有很多可以用于壓縮文件的工具,但它們的表現并不都是一樣的,也不是所有的壓縮效果都是一樣的。在這篇文章中,我們比較其中的
發表于 05-07 15:25
使用Python對壓縮文件的處理
zipfile是Python里用來做zip格式編碼的壓縮和解壓縮的module,zipfile里有兩個非常重要的class:ZipFile和ZipInfo。ZipFile是主要的類,用來創建和讀取zip文件,而ZipInfo是存
如何在Linux上使用Pigz來更快地壓縮文件
Pigz是一款快速壓縮文件的工具,它能夠使用多個CPU核心進行壓縮,使得壓縮速度得到了極大的提升。在本文中,我們將介紹如何在Linux上使用Pigz來更快地壓縮文件。
![如何在Linux上使用Pigz來更快地<b class='flag-5'>壓縮文件</b>](https://file1.elecfans.com/web2/M00/82/B8/wKgZomRd-3eAaI-2AACLovAhIxs410.jpg)
評論