




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JAVA應(yīng)用開發(fā)詳解第12章:JAVAIO ——壓縮流MLDN軟件教學(xué)研發(fā)部本章目標(biāo)了解壓縮流的主要作用了解JAVAIO支持的三種壓縮格式掌握ZipOutputStream、ZipFile、ZipInputStream三個(gè)類的作用壓縮流在日常的使用中經(jīng)常會(huì)使用到像WinRAR或WinZIP這樣的壓縮文件,通過這些軟件可以把一個(gè)很大的文件進(jìn)行壓縮以方便傳輸。在Java中為了減少傳輸時(shí)的數(shù)據(jù)量也提供了專門的壓縮流,可以將文件或文件夾壓縮成ZIP、JAR、GZIP等文件形式。壓縮流的實(shí)現(xiàn)ZIP是一種較為常見的壓縮形式,在Java中要想實(shí)現(xiàn)ZIP的壓縮需要導(dǎo)入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry幾個(gè)類完成操作。JAR及GZIP文件格式的壓縮輸入、輸出流在JAVAIO中,不僅可以實(shí)現(xiàn)ZIP壓縮格式的輸入、輸出,也可以實(shí)現(xiàn)JAR及GZIP文件格式的壓縮:JAR壓縮的支持類保存在java.util.jar包中,常用類有如下幾個(gè):JAR壓縮輸出流:JarOutputStream;JAR壓縮輸入流:JarInputStreamJAR文件:JARFileJAR實(shí)體:JAREntryGZIP是用于UNIX系統(tǒng)的文件壓縮,在Linux中經(jīng)常會(huì)使用到*.gz的文件,就是GZIP格式,GZIP壓縮的支持類保存在java.util.zip包中,常用類有如下幾個(gè):GZIP壓縮輸出流:GZIPOutputStreamGZIP壓縮輸入流:GZIPInputStreamZipEntry在每一個(gè)壓縮文件中都會(huì)存在多個(gè)子文件,那么這每一個(gè)的子文件在JAVA中就使用ZipEntry表示。ZipEntry類的常用方法No.方法類型描述1publicZipEntry(Stringname)構(gòu)造創(chuàng)建對象并指定要?jiǎng)?chuàng)建的ZipEntry名稱2publicbooleanisDirectory()普通判斷此ZipEntry是否是目錄ZipOutputStream如果要想完成一個(gè)文件或文件夾的壓縮,要使用ZipOutputStream類完成,ZipOutputStream是OutputStream的子類。No.方法類型描述1publicZipOutputStream(OutputStreamout)構(gòu)造創(chuàng)建新的ZIP輸出流2publicvoidputNextEntry(ZipEntrye)throwsIOException普通設(shè)置每一個(gè)ZipEntry對象3publicvoidsetComment(Stringcomment)普通設(shè)置ZIP文件的注釋壓縮mldn.zip文件publicclassZipOutputStreamDemo01{ publicstaticvoidmain(String[]args)throwsException{ //所有異常拋出 Filefile=newFile("d:"+File.separator+"mldn.txt"); //定義要壓縮的文件 FilezipFile=newFile("d:"+File.separator+"mldn.zip");//定義壓縮文件名稱 InputStreaminput=newFileInputStream(file); //定義輸入文件流 ZipOutputStreamzipOut=null; //定義壓縮輸出流 //實(shí)例化壓縮輸出流對象,并指定壓縮文件的輸出路徑 zipOut=newZipOutputStream(newFileOutputStream(zipFile)); //每一個(gè)被壓縮的文件都用ZipEntry表示,需要為每一個(gè)壓縮后的文件設(shè)置名稱 zipOut.putNextEntry(newZipEntry(file.getName())); //創(chuàng)建ZipEntry zipOut.setComment(""); //設(shè)置注釋 inttemp=0; //接收輸入的數(shù)據(jù) while((temp=input.read())!=-1){ //讀取內(nèi)容 zipOut.write(temp); //壓縮輸出內(nèi)容 } input.close(); //關(guān)閉輸入流 zipOut.close(); //關(guān)閉壓縮輸出流 }}壓縮一個(gè)文件夾以上是對一個(gè)文件進(jìn)行壓縮,但是在日常的開發(fā)中,往往需要對一個(gè)文件夾進(jìn)行壓縮,例如,現(xiàn)在在d盤中存在一個(gè)mldn的一個(gè)文件夾。從使用各種壓縮軟件的經(jīng)驗(yàn)來看,如果現(xiàn)在要進(jìn)行壓縮的話,則在壓縮之后的文件中應(yīng)該存在一個(gè)mldn文件夾。在文件夾中應(yīng)該存放著各個(gè)壓縮文件。所以,在實(shí)現(xiàn)的時(shí)候就應(yīng)該列出文件夾中的全部內(nèi)容,并把每一個(gè)內(nèi)容設(shè)置成ZipEntry的對象,保存到壓縮文件之中。實(shí)現(xiàn)代碼publicclassZipOutputStreamDemo02{ publicstaticvoidmain(String[]args)throwsException{ //所有異常拋出 Filefile=newFile("d:"+File.separator+"mldn"); //要壓縮的文件夾 FilezipFile=newFile("d:"+File.separator+"mldndir.zip");//壓縮文件的名稱 InputStreaminput=null; //定義文件輸入流 ZipOutputStreamzipOut=null; //定義壓縮輸出流 zipOut=newZipOutputStream(newFileOutputStream(zipFile));//實(shí)例化壓縮輸出流 zipOut.setComment(""); //設(shè)置注釋 if(file.isDirectory()){ //判斷是否是目錄 Filelists[]=file.listFiles(); //列出全部文件 for(inti=0;i<lists.length;i++){ input=newFileInputStream(lists[i]); //設(shè)置文件輸入流 //每一個(gè)被壓縮的文件都用ZipEntry表示,需要為每一個(gè)壓縮后的文件設(shè)置名稱 zipOut.putNextEntry(newZipEntry(file.getName() +File.separator+lists[i].getName())); inttemp=0; //接收輸入的數(shù)據(jù) while((temp=input.read())!=-1){ //讀取內(nèi)容 zipOut.write(temp); //壓縮輸出內(nèi)容 } input.close(); //關(guān)閉輸入流 } } zipOut.close(); //關(guān)閉壓縮輸出流 }}壓縮之后的效果ZipFile在Java中,每一個(gè)壓縮文件都可以使用ZipFile表示,還可以使用ZipFile根據(jù)壓縮后的文件名稱找到每一個(gè)壓縮文件中的ZipEntry并將其進(jìn)行解壓縮操作。No.方法類型描述1publicZipFile(Filefile)throwsZipException,IOException構(gòu)造根據(jù)File類實(shí)例化ZipFile對象2publicZipEntrygetEntry(Stringname)普通根據(jù)名稱找到其對應(yīng)的ZipEntry3publicInputStreamgetInputStream(ZipEntryentry)throwsIOException普通根據(jù)ZipEntry取得InputStream實(shí)例4publicStringgetName()普通得到壓縮文件的路徑名稱實(shí)例化ZipFile類對象packageorg.lxh.demo12.zipdemo;importjava.io.File;importjava.util.zip.ZipFile;publicclassZipFileDemo01{ publicstaticvoidmain(String[]args)throwsException{ Filefile=newFile("d:"+File.separator+"mldn.zip");//找到壓縮文件 ZipFilezipFile=newZipFile(file); //實(shí)例化ZipFile對象 System.out.println("壓縮文件的名稱為:"+zipFile.getName());//得到壓縮文件的名稱 }}解壓縮文件packageorg.lxh.demo12.zipdemo;importjava.io.File;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.zip.ZipEntry;importjava.util.zip.ZipFile;publicclassZipFileDemo02{ publicstaticvoidmain(String[]args)throwsException{ Filefile=newFile("d:"+File.separator+"mldn.zip"); //找到壓縮文件 FileoutputFile=newFile("d:"+File.separator +"mldn_unzip.txt"); //定義解壓縮的文件名稱 ZipFilezipFile=newZipFile(file); //實(shí)例化ZipFile對象 ZipEntryentry=zipFile.getEntry("mldn.txt"); //得到一個(gè)壓縮實(shí)體 InputStreaminput=zipFile.getInputStream(entry); //取得ZipEntry輸入流 OutputStreamout=newFileOutputStream(outputFile); //實(shí)例化輸出流對象 inttemp=0; //保存接收數(shù)據(jù) while((temp=input.read())!=-1){ //讀取內(nèi)容 out.write(temp); //輸出內(nèi)容 } input.close(); //關(guān)閉輸入流 out.close(); //關(guān)閉輸出流 }}ZipInputStreamZipInputStream是InputStream的子類,通過此類,可以方便的讀取ZIP格式的壓縮文件。No.方法類型描述1publicZipInputStream(InputStreamin)構(gòu)造實(shí)例化ZipInputStream對象2publicZipEntrygetNextEntry()throwsIOException普通取得下一個(gè)ZipEntry取得mldn.zip中的一個(gè)ZipEntrypackageorg.lxh.demo12.zipdemo;importjava.io.File;importjava.io.FileInputStream;importjava.util.zip.ZipEntry;importjava.util.zip.ZipInputStream;publicclassZipInputStreamDemo01{ publicstaticvoidmain(String[]args)throwsException{//所有異常拋出 FilezipFile=newFile("d:"+File.separator+"mldn.zip");//定義壓縮文件名稱 ZipInputStreaminput=null; //定義壓縮輸入流 input=newZipInputStream(newFileInputStream(zipFile)); //實(shí)例化壓縮輸入流 ZipEntryentry=input.getNextEntry(); //得到一個(gè)壓縮實(shí)體 System.out.println("壓縮實(shí)體名稱:"+entry.getName());//輸出實(shí)體名稱 input.close(); //關(guān)閉壓縮輸入流 }}解壓縮mldndir.zip文件ZipInputStream類與ZipFile結(jié)合就可以對壓縮的文件夾進(jìn)行解壓縮的操作,但是需要注意的是,在mldndir.zip文件中本身是包含壓縮的文件夾的,所以在進(jìn)行解壓縮之前,應(yīng)該先根據(jù)ZIP文件中的文件夾名稱在硬盤上創(chuàng)建好一個(gè)對應(yīng)的文件夾,之后才能把文件解壓縮進(jìn)去,而且在操作的時(shí)候?qū)τ诿恳粋€(gè)解壓縮的文件都必須先創(chuàng)建(File類的createNewFile()方法可以創(chuàng)建新文件)之后再將內(nèi)容輸出。解壓縮mldndir.zip文件publicclassZipInputStreamDemo02{ publicstaticvoidmain(String[]args)throwsException{ Filefile=newFile("d:"+File.separator+"mldndir.zip"); //找到壓縮文件 FileoutFile=null; //定義輸出的文件對象 ZipFilezipFile=newZipFile(file); //實(shí)例化ZipFile對象 ZipInputStreamzipInput=newZipInputStream(newFileInputStream(file)); ZipEntryentry=null; //定義一個(gè)ZipEntry對象,用于接收壓縮文件中的每一個(gè)實(shí)體 InputStreaminput=null; //定義輸入流,用于讀取每一個(gè)ZipEntry OutputStreamout
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動(dòng)合同違約責(zé)任及典型案例分析
- 家庭用工合同模板參考范本
- 篇二:購房合同范本規(guī)范
- 室內(nèi)防水改造合同范本
- 定制旅行服務(wù)協(xié)議合同
- 房地產(chǎn)開發(fā)施工合同樣本
- 金融市場中銀行承兌質(zhì)押合同的法律效力
- 兼職市場拓展合同樣本
- 發(fā)射設(shè)備在極端環(huán)境下的穩(wěn)定性檢測考核試卷
- 塑膠跑道材料的生產(chǎn)工藝與質(zhì)量控制考核試卷
- 《智慧旅游認(rèn)知與實(shí)踐》課件-第九章 智慧旅行社
- 馬工程《刑法學(xué)(下冊)》教學(xué)課件 第16章 刑法各論概述
- GPIB控制VP-8194D收音信號發(fā)生器指令
- 建立良好師生關(guān)系
- 鋼管、扣件、絲杠租賃明細(xì)表
- 施工現(xiàn)場臨電臨水施工方案
- 員工預(yù)支現(xiàn)金與費(fèi)用報(bào)銷流程
- 唐詩三百首(楷書)
- (新版)公用設(shè)備工程師《專業(yè)知識》(給排水)考試題庫及答案
- 01-第一章運(yùn)動(dòng)學(xué)緒論P(yáng)PT課件
評論
0/150
提交評論