程式扎記: [ Java 代碼範本 ] GZIPInputStream reading line by line

標籤

2012年8月6日 星期一

[ Java 代碼範本 ] GZIPInputStream reading line by line

來源自 這裡 
前言 : 
考慮你在 Linux 有個 gz 過後的檔案, 但你不想解壓縮後再讀取該檔案的內容. 你可以透過 java.util.zip.GZIPInputStream 來直接讀取 .gz 檔案的解壓縮後的檔案內容. 

範例代碼 : 
你可以使用 gzip 來建立 .gz 檔案, 考慮你有檔案 "test.txt" : 
# cat test.txt # 原始 test.txt 內容
This is test line1
This is test line2
This is test end of line

# gzip test.txt # 壓縮 test.txt 成 test.txt.gz
# zcat test.txt.gz # 使用 zcat 檢視 .gz 內容
This is test line1
This is test line2
This is test end of line

Ps. 如果你使用 tar 來建立 .gz, 在建立完的 .gz 檔案會帶有檔案的訊息, 因此你在使用 zcat 檢視時會出現一些前置的 "雜訊" : 
# gzip -d test.txt.gz # 解壓縮剛剛建立的 .gz
# tar -zcvf test.tar.gz ./test.txt # 使用 tar 建立 .gz
# zcat test.tar.gz
./test.txt0000644000000000000000000000007712007707244011440 0ustar rootrootThis is test line1
This is test line2
This is test end of line

底下為範例代碼透過 Java 直接讀取 .gz 內容 : 
- GZIPInputStreamEx.java : 一行行讀取 test.txt.gz 內容 
  1. package test.stlib;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.io.Reader;  
  9. import java.util.zip.GZIPInputStream;  
  10.   
  11. public class GZIPInputStreamEx  {  
  12.     public static void main(String[] args) throws Exception{  
  13.         String file_path = "test.txt.gz";  
  14.         String encoding = "UTF-8";  
  15.         File testfile = new File(file_path);  
  16.         InputStream is = new FileInputStream(testfile);       
  17.         Reader decoder = new InputStreamReader(new GZIPInputStream(is), encoding); // 此行為關鍵代碼!  
  18.         BufferedReader br = new BufferedReader(decoder);  
  19.         String line = null;  
  20.         while((line=br.readLine())!=null)  
  21.         {  
  22.             System.out.printf("\t[Info] Read: '%s'\n", line);  
  23.         }  
  24.         br.close();  
  25.     }  
  26. }  
補充說明 : 
鳥哥 Linux 私房菜 - 第九章、檔案與檔案系統的壓縮與打包

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!