Java IO--壓縮流

壓縮流:


壓縮流的實現:


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() ;
	}
};

總結:

相關文章
相關標籤/搜索