java 項(xiàng)目總是有上傳 zip 包和下載 zip 包的需求,這時(shí)就得用 ZipInputStream 和 ZipOutputStream 類。
基礎(chǔ)概念
- ZipOutputStream:是一種 FilterInputStream 、裝飾器模式中的實(shí)現(xiàn)類,它可以直接讀取zip 包的內(nèi)容
- ZipOutputStream (OutputStream out):zip 輸出流
- ZipEntry(String name):表示壓縮文件中的一個(gè)文件或者目錄
- void putNextEntry(ZipEntry e):寫入新的壓縮文件或者目錄
- ZipIutputStream:是一種 FilterOutputStream, 可以實(shí)現(xiàn) zip 文件的解壓
- ZipIutputStream (IutputStream out):zip 輸入流
- ZipEntry getNextEntry():得到壓縮文件中的一個(gè)文件或者目錄
壓縮
壓縮文件就是先讀取一個(gè)文件夾的內(nèi)容,創(chuàng)建 ZipEntry 放入 ZipOutputStream 下,然后用 InputStream 讀取源文件內(nèi)容并寫入 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 + " 已經(jīng)存在");
return;
}
try {
byte[] buffer = new byte[1024];
try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)))){
for(File file: sourceFile.listFiles()) {
// 創(chuàng)建 ZIP 中的文件,并添加進(jìn)壓縮包
ZipEntry zipEntry = new ZipEntry(file.getName());
zos.putNextEntry(zipEntry);
// 讀取待壓縮的文件并寫進(jìn)壓縮包里
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();
}
}
解壓
一個(gè)壓縮文件就是一個(gè)特殊的 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);
//判斷路徑是否存在,不存在則創(chuàng)建文件路徑
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();
}
}
總結(jié)
介紹了一下 java 中的壓縮文件是如何解壓與壓縮的,對(duì)小伙伴們有幫助的話就點(diǎn)個(gè)贊哦。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
JAVA
+關(guān)注
關(guān)注
20文章
3001瀏覽量
116453 -
Zip
+關(guān)注
關(guān)注
0文章
17瀏覽量
8845 -
壓縮
+關(guān)注
關(guān)注
2文章
103瀏覽量
20139 -
文件
+關(guān)注
關(guān)注
1文章
594瀏覽量
26066
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
如何在Linux使用unzip命令在終端解壓縮文件
ZIP是最廣泛使用的存檔文件格式,支持無損數(shù)據(jù)壓縮。ZIP文件是一個(gè)數(shù)據(jù)容器,其中包含一個(gè)或多個(gè)壓縮文件或目錄。
發(fā)表于 12-08 16:52
?6204次閱讀
Linux中常用的壓縮和解壓縮命令介紹
在Linux中,壓縮和解壓縮文件是常見的操作。有時(shí)候,我們需要將大文件壓縮成較小的文件,以便于傳
發(fā)表于 07-31 11:50
?2802次閱讀
linux的壓縮和解壓操作
1、 壓縮/解壓操作
在開發(fā)中,很多時(shí)候會(huì)遇到某些文件要進(jìn)行壓縮的操作,比如文件較大不方便傳輸?shù)?/div>
發(fā)表于 12-23 06:56
WinRAR壓縮文件我們?cè)撝赖膸讉€(gè)點(diǎn)【jiasuba】
真正做到事半功倍。1.制作自解壓文件 如果你平時(shí)使用Win7系統(tǒng)下載的WinRAR來壓縮文件,而你的朋友也不會(huì)使用WinRAR,但你的數(shù)據(jù)又確實(shí)必須壓縮后才能夠給他。這時(shí),我們就可以
發(fā)表于 03-14 09:47
壓縮文件可以使用pdf壓縮器嗎
` 壓縮文件可以使用pdf壓縮器嗎?現(xiàn)在很多辦公人員都會(huì)編輯各種文檔格式的文件,也都掌握了將其它可編輯格式轉(zhuǎn)換為PDF文件格式的方法,但是有時(shí)候PDF
發(fā)表于 10-27 14:03
在 Linux 上壓縮文件的 5 種方法
在 Linux 上壓縮文件的 5 種方法 在 Linux 系統(tǒng)上有很多可以用于壓縮文件的工具,但它們的表現(xiàn)并不都是一樣的,也不是所有的壓縮效果都是一樣的。在這篇文章中,我們比較其中的
發(fā)表于 05-07 15:25
在 Linux 上壓縮文件的 5 種方法
的意思是一樣的 – tar 和 gz 的組合來顯示文件是一個(gè)壓縮的 tar 文件。在壓縮完成后,你將同時(shí)得到原始文件和
發(fā)表于 05-13 15:45
使用Python對(duì)壓縮文件的處理
zipfile是Python里用來做zip格式編碼的壓縮和解壓縮的module,zipfile里有兩個(gè)非常重要的class:ZipFile和ZipInfo。ZipFile是主要的類,用來創(chuàng)建和讀取zip文件,而ZipInfo是存
如何在Linux上使用Pigz來更快地壓縮文件
Pigz是一款快速壓縮文件的工具,它能夠使用多個(gè)CPU核心進(jìn)行壓縮,使得壓縮速度得到了極大的提升。在本文中,我們將介紹如何在Linux上使用Pigz來更快地壓縮文件。
linux解壓gz文件的命令
在Linux系統(tǒng)中,可以使用gzip命令解壓.gz文件。gzip命令用于壓縮和解壓縮文件,使用方法如下:
java中的壓縮文件是如何解壓與壓縮的
評(píng)論