Java IO--壓縮流ZipOutputStream/ZipInputStream
壓縮流:

壓縮流的實現:

zipEntry:

在實例化ZipEntry的時候,要設置名稱,此名稱實際上就是壓縮文件中的每一個元素的名稱。
ZipOutputStream:


import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.io.FileOutputStream ;
public class ZipOutputStreamDemo01{
public static void main(String args[]) throws Exception{ // 所有異常拋出
File file = new File("d:" + File.separator + "mldn.txt") ; // 定義要壓縮的文件
File zipFile = new File("d:" + File.separator + "mldn.zip") ; // 定義壓縮文件名稱
InputStream input = new FileInputStream(file) ; // 定義文件的輸入流
ZipOutputStream zipOut = null ; // 聲明壓縮流對象
zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 設置ZipEntry對象
zipOut.setComment("www.mldnjava.cn") ; // 設置注釋
int temp = 0 ;
while((temp=input.read())!=-1){ // 讀取內容
zipOut.write(temp) ; // 壓縮輸出
}
input.close() ; // 關閉輸入流
zipOut.close() ; // 關閉輸出流
}
};
以上的操作隻是完成了一個文件的壓縮,如果要完成一個文件夾的壓縮呢?
壓縮一個文件夾:

import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.io.FileOutputStream ;
public class ZipOutputStreamDemo02{
public static void main(String args[]) throws Exception{ // 所有異常拋出
File file = new File("d:" + File.separator + "mldn") ; // 定義要壓縮的文件夾
File zipFile = new File("d:" + File.separator + "mldndir.zip") ; // 定義壓縮文件名稱
InputStream input = null ; // 定義文件輸入流
ZipOutputStream zipOut = null ; // 聲明壓縮流對象
zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
zipOut.setComment("www.mldnjava.cn") ; // 設置注釋
int temp = 0 ;
if(file.isDirectory()){ // 判斷是否是文件夾
File lists[] = file.listFiles() ; // 列出全部文件
for(int i=0;i<lists.length;i++){
input = new FileInputStream(lists[i]) ; // 定義文件的輸入流
zipOut.putNextEntry(new ZipEntry(file.getName()
+File.separator+lists[i].getName())) ; // 設置ZipEntry對象
while((temp=input.read())!=-1){ // 讀取內容
zipOut.write(temp) ; // 壓縮輸出
}
input.close() ; // 關閉輸入流
}
}
zipOut.close() ; // 關閉輸出流
}
};
ZipFile:

ZipFile在實例化的時候必須接收File類的實例,此File類的實例是指向一個壓縮的*.zip文件。
為ZipFile實例化:
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.util.zip.ZipFile ;
import java.io.FileOutputStream ;
public class ZipFileDemo01{
public static void main(String args[]) throws Exception{ // 所有異常拋出
File file = new File("d:" + File.separator + "mldn.zip") ; // 找到壓縮文件
ZipFile zipFile = new ZipFile(file) ; // 實例化ZipFile對象
System.out.println("壓縮文件的名稱:" + zipFile.getName()) ; // 得到壓縮文件的名稱
}
};通過ZipFile文件,為mldn.zip進行解壓縮操作。import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.io.OutputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.util.zip.ZipFile ;
import java.io.FileOutputStream ;
public class ZipFileDemo02{
public static void main(String args[]) throws Exception{ // 所有異常拋出
File file = new File("d:" + File.separator + "mldn.zip") ; // 找到壓縮文件
File outputFile = new File("d:" + File.separator + "mldn_unzip.txt") ; // 定義解壓縮的文件名稱
ZipFile zipFile = new ZipFile(file) ; // 實例化ZipFile對象
ZipEntry entry = zipFile.getEntry("mldn.txt") ; // 得到一個壓縮實體
OutputStream out = new FileOutputStream(outputFile) ; // 實例化輸出流
InputStream input = zipFile.getInputStream(entry) ; // 得到一個壓縮實體的輸入流
int temp = 0 ;
while((temp=input.read())!=-1){
out.write(temp) ;
}
input.close() ; // 關閉輸入流
out.close() ; // 關閉輸出流
}
};以上的操作操作中,有一個問題,必須知道壓縮文件中的每一個壓縮實例的名稱才可以進行解壓縮操作,而如果現在假設是一個文件夾呢?ZipInputStream:
定義:


import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipInputStream ;
import java.io.FileInputStream ;
public class ZipInputStreamDemo01{
public static void main(String args[]) throws Exception{ // 所有異常拋出
File zipFile = new File("d:" + File.separator + "mldn.zip") ; // 定義壓縮文件名稱
ZipInputStream input = null ; // 定義壓縮輸入流
input = new ZipInputStream(new FileInputStream(zipFile)) ; // 實例化ZIpInputStream
ZipEntry entry = input.getNextEntry() ; // 得到一個壓縮實體
System.out.println("壓縮實體名稱:" + entry.getName()) ;
input.close() ;
}
};
import java.io.File ;
import java.io.OutputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipFile ;
import java.util.zip.ZipInputStream ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
public class ZipInputStreamDemo02{
public static void main(String args[]) throws Exception{ // 所有異常拋出
File file = new File("d:" + File.separator + "mldndir.zip") ; // 定義壓縮文件名稱
File outFile = null ; // 輸出文件的時候要有文件夾的操作
ZipFile zipFile = new ZipFile(file) ; // 實例化ZipFile對象
ZipInputStream zipInput = null ; // 定義壓縮輸入流
OutputStream out = null ; // 定義輸出流,用於輸出每一個實體內容
InputStream input = null ; // 定義輸入流,讀取每一個ZipEntry
ZipEntry entry = null ; // 每一個壓縮實體
zipInput = new ZipInputStream(new FileInputStream(file)) ; // 實例化ZIpInputStream
while((entry = zipInput.getNextEntry())!=null){ // 得到一個壓縮實體
System.out.println("解壓縮" + entry.getName() + "文件。") ;
outFile = new File("d:" + File.separator + entry.getName()) ; // 定義輸出的文件路徑
if(!outFile.getParentFile().exists()){ // 如果輸出文件夾不存在
outFile.getParentFile().mkdir() ; // 創建文件夾
}
if(!outFile.exists()){ // 判斷輸出文件是否存在
outFile.createNewFile() ; // 創建文件
}
input = zipFile.getInputStream(entry) ; // 得到每一個實體的輸入流
out = new FileOutputStream(outFile) ; // 實例化文件輸出流
int temp = 0 ;
while((temp=input.read())!=-1){
out.write(temp) ;
}
input.close() ; // 關閉輸入流
out.close() ; // 關閉輸出流
}
input.close() ;
}
};
總結:

最後更新:2017-04-03 14:54:18