java 壓縮和解壓縮Zip、Jar、Gzip文件實例代碼
我們經(jīng)常會使用WinZIP等壓縮軟件將文件進行壓縮以方便傳輸。在java里面也提供了將文件進行壓縮以減少傳輸時的數(shù)據(jù)量的類,可以很方便的將文件壓縮成ZIP、JAR、GZIP等形式,GZIP主要是在Linux系統(tǒng)下的壓縮文件。
下面主要講的就是ZIP形式的壓縮文件,而JAR、GZIP形式的壓縮文件也是類似的用法。
ZIP是一種很常見的壓縮形式,在java中要實現(xiàn)ZIP的壓縮主要用到的是java.util.zip這個包里面的類。主要有ZipFile、 ZipOutputStream、ZipInputStream和ZipEntry。ZipOutputStream是用來壓縮文件 的,ZipInputStream和ZipFile是用來解壓縮文件的,在壓縮和解壓縮的過程中,ZipEntry都會用到。在java的Zip壓縮文件 中,每一個子文件都是一個ZipEntry對象。
壓縮文件:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipOutputStreamTest {
public static void main(String args[]) throws IOException {
test1();
test2();
}
public static void test1() throws IOException {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\testZip.zip"), Charset.forName("GBK"));
//實例化一個名稱為ab.txt的ZipEntry對象
ZipEntry entry = new ZipEntry("ab.txt");
//設(shè)置注釋
zos.setComment("zip測試for單個文件");
//把生成的ZipEntry對象加入到壓縮文件中,而之后往壓縮文件中寫入的內(nèi)容都會放在這個ZipEntry對象里面
zos.putNextEntry(entry);
InputStream is = new FileInputStream("D:\\ab.txt");
int len = 0;
while ((len = is.read()) != -1)
zos.write(len);
is.close();
zos.close();
}
public static void test2() throws IOException {
File inFile = new File("D:\\test");
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\test.zip"), Charset.forName("GBK"));
zos.setComment("多文件處理");
zipFile(inFile, zos, "");
zos.close();
}
public static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException {
if (inFile.isDirectory()) {
File[] files = inFile.listFiles();
for (File file:files)
zipFile(file, zos, dir + "\\" + inFile.getName());
} else {
String entryName = null;
if (!"".equals(dir))
entryName = dir + "\\" + inFile.getName();
else
entryName = inFile.getName();
ZipEntry entry = new ZipEntry(entryName);
zos.putNextEntry(entry);
InputStream is = new FileInputStream(inFile);
int len = 0;
while ((len = is.read()) != -1)
zos.write(len);
is.close();
}
}
}
解壓縮文件:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ZipInputStreamTest {
public static void main(String args[]) throws IOException {
File file = new File("D:\\test.zip");//壓縮文件
ZipFile zipFile = new ZipFile(file);//實例化ZipFile,每一個zip壓縮文件都可以表示為一個ZipFile
//實例化一個Zip壓縮文件的ZipInputStream對象,可以利用該類的getNextEntry()方法依次拿到每一個ZipEntry對象
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file), Charset.forName("GBK"));
ZipEntry zipEntry = null;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String fileName = zipEntry.getName();
File temp = new File("D:\\unpackTest\\" + fileName);
if (! temp.getParentFile().exists())
temp.getParentFile().mkdirs();
OutputStream os = new FileOutputStream(temp);
//通過ZipFile的getInputStream方法拿到具體的ZipEntry的輸入流
InputStream is = zipFile.getInputStream(zipEntry);
int len = 0;
while ((len = is.read()) != -1)
os.write(len);
os.close();
is.close();
}
zipInputStream.close();
}
}
以上就是對Java 壓縮和解壓縮文件的資料整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!
相關(guān)文章
解決idea2020.1 用gitee push推送被拒絕的原因(親測有效)
這篇文章主要介紹了解決idea2020.1 用gitee push推送被拒絕的原因(親測有效),本文給大家分享解決方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Java設(shè)計模式之責(zé)任鏈模式(Chain of Responsibility模式)介紹
這篇文章主要介紹了Java設(shè)計模式之責(zé)任鏈模式(Chain of Responsibility模式)介紹,本文講解了如何使用責(zé)任鏈模式,并給出了4種使用實例,需要的朋友可以參考下2015-03-03
Spring中的之啟動過程obtainFreshBeanFactory詳解
這篇文章主要介紹了Spring中的之啟動過程obtainFreshBeanFactory詳解,在refresh時,prepareRefresh后,馬上就調(diào)用了obtainFreshBeanFactory創(chuàng)建beanFactory以及掃描bean信息(beanDefinition),并通過BeanDefinitionRegistry注冊到容器中,需要的朋友可以參考下2024-02-02
關(guān)于在IDEA熱部署插件JRebel使用問題詳解
這篇文章主要介紹了關(guān)于在IDEA熱部署插件JRebel使用問題詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
詳解JavaEE 使用 Redis 數(shù)據(jù)庫進行內(nèi)容緩存和高訪問負(fù)載
本篇文章主要介紹了JavaEE 使用 Redis 數(shù)據(jù)庫進行內(nèi)容緩存和高訪問負(fù)載,具有一定的參考價值,有興趣的可以了解一下2017-08-08

