java如何使用zip壓縮實(shí)現(xiàn)讀取寫入
zip壓縮
zip文檔可以以壓縮格式存儲(chǔ)一個(gè)或多個(gè)文件,可以使用ZipInputStream讀取Zip文檔,使用ZipOutputStream來(lái)寫入到Zip文件中
ZipInputStream讀取
ZipInputStream zin = new ZipInputStream(in);
ZipEntry ze;
// getNextEntry返回描述這個(gè)項(xiàng)的ZipEntry的對(duì)象
while ((ze = zin.getNextEntry()) != null) {
// getInputStream獲取用于讀取該項(xiàng)的輸入流
BufferedReader br = new BufferedReader(
new InputStreamReader(zf.getInputStream(ze), charset));
// 業(yè)務(wù)邏輯 todo
br.close();
// closeEntry關(guān)閉當(dāng)前打開的項(xiàng)
zin.closeEntry();
}
zin.close();ZipOutputStream寫入
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
File fileWillZip = new File(dir);
if (fileWillZip.exists()) {
// 需要壓縮的文件是文件夾。需要遞歸進(jìn)行壓縮
if(fileWillZip.isDirectory()){
compressZip(zipOut,fileWillZip,fileWillZip.getName());
} else { // 是文件,直接壓縮
zip(zipOut,fileWillZip,dir);
}
}
zipOut.closeEntry();
zipOut.close();
private void compressZip(ZipOutputStream zipOutput, File file, String suffixpath) {
File[] listFiles = file.listFiles();// 列出所有的文件
for(File fi : listFiles){
if(fi.isDirectory()){ // 如果是文件夾,繼續(xù)遞歸
if(suffixpath.equals("")){
compressZip(zipOutput, fi, fi.getName());
}else{
compressZip(zipOutput, fi, suffixpath + File.separator + fi.getName());
}
}else{
zip(zipOutput, fi, suffixpath);
}
}
}
public void zip(ZipOutputStream zipOutput, File file, String suffixpath) {
try {
// 創(chuàng)建ZipEntry對(duì)象
ZipEntry zEntry = null;
if(suffixpath.equals("")){
zEntry = new ZipEntry(file.getName());
}else{
zEntry = new ZipEntry(suffixpath + File.separator + file.getName());
}
// putNextEntry將給定的ZipEntry中的信息寫出到輸出流,并定位用于寫出數(shù)據(jù)的流,然后這些數(shù)據(jù)可以通過(guò)write方法寫出到這個(gè)輸出流中
zipOutput.putNextEntry(zEntry);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
int read = 0;
while((read = bis.read(buffer)) != -1){
zipOutput.write(buffer, 0, read);
}
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}以上就是java如何使用zip壓縮實(shí)現(xiàn)讀取寫入的詳細(xì)內(nèi)容,更多關(guān)于java zip壓縮讀取寫入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JNDI簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了JNDI簡(jiǎn)介,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Springboot敏感字段脫敏的實(shí)現(xiàn)思路
這篇文章主要介紹了Springboot敏感字段脫敏的實(shí)現(xiàn)思路,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
java 學(xué)習(xí)筆記(入門篇)_多選擇結(jié)構(gòu)switch語(yǔ)句
在java中為多路分支選擇流程專門提供了switch語(yǔ)句,switch語(yǔ)句根據(jù)一個(gè)表達(dá)式的值,選擇運(yùn)行多個(gè)操作中的一個(gè),感興趣的朋友可以了解下2013-01-01
在SpringBoot當(dāng)中使用Thymeleaf視圖解析器的詳細(xì)教程
Thymeleaf是一款開源的模板引擎,它允許前端開發(fā)者使用HTML與XML編寫動(dòng)態(tài)網(wǎng)頁(yè),hymeleaf的主要特點(diǎn)是將表達(dá)式語(yǔ)言嵌入到HTML結(jié)構(gòu)中,它支持Spring框架,使得在Spring MVC應(yīng)用中集成非常方便,本文給大家介紹了在SpringBoot當(dāng)中使用Thymeleaf視圖解析器的詳細(xì)教程2024-09-09
BufferedReader中read()方法和readLine()方法的使用
這篇文章主要介紹了BufferedReader中read()方法和readLine()方法的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Java圖書管理系統(tǒng),課程設(shè)計(jì)必用(源碼+文檔)
本系統(tǒng)采用Java,MySQL 作為系統(tǒng)數(shù)據(jù)庫(kù),重點(diǎn)開發(fā)并實(shí)現(xiàn)了系統(tǒng)各個(gè)核心功能模塊,包括采編模塊、典藏模塊、基礎(chǔ)信息模塊、流通模塊、期刊模塊、查詢模塊、評(píng)論模塊、系統(tǒng)統(tǒng)計(jì)模塊以及幫助功能模塊2021-06-06

