2011-11-21 98 views
4

我從一個服務中收集完整的HTML,這個服務提供對大量博客和新聞網站的訪問。我正在檢查HTML(實時)以查看它是否包含一些關鍵字。如果它包含其中一個關鍵字,我將HTML寫入一個文本文件進行存儲。Java文本文件大小(在文件關閉之前)

我想這樣做一個星期。所以我正在收集大量的數據。測試程序3分鐘產生100MB的文本文件。我有4TB的空間,我不能用這個以上。

另外,我不希望文本文件變得太大,因爲我認爲他們會成爲未打開。

我所建議是打開一個文本文件,並寫入HTML它,經常檢查其大小。如果它變得比200MB更大,我關閉文本文件並打開另一個文件。我還需要記錄總共使用了多少空間,以便我可以確保不會接近4 TB。

我在這一點上的問題是如何檢查的文本文件的大小的文件已經被關閉前(使用FileWriter.close())。有沒有這個功能,或者我應該計算寫入文件的字符數量並使用它來估計文件大小?

一個單獨的問題:是否有方法來減少我的文本文件佔用的空間量?我在Java工作。

+2

一個單獨的問題應該是一個單獨的問題。 – beny23

回答

5

創建,其對寫入的字符數的作家,用它來包裝你OutputStreamWriter

[編輯]注:保存文本文件正確的方法是:

new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding))); 

的編碼是很重要的;它通常是「UTF-8」。

這條鏈給你兩個地方,你可以注入你的包裝:你可以用筆者拿到的字符或內OutputStream的數量來獲得寫入的字節。

+0

好的,謝謝。我會試試這個。我怎麼知道角色需要多少個字節? – Andrew

+0

如果您處理英文網頁,每個字符需要一個字節。 UTF-8編碼非常緊湊。但是你也可以包裝你的'FileOutputStream'來代替它。 –

+0

好的。我會試着嘗試這個。我要計算字符的方式(也許這不是正確的方法)是通過對每個字符串使用Java字符串長度方法來保持運行總數,我寫入文件 – Andrew

2

是否發生了你計算你寫入文件的字節數?

+0

我想這基本上是我想要做的,我想我是通過計算寫入文件的字符數來完成的,正如Aaron所建議的那樣。 – Andrew

+0

是的,我也投票贊成亞倫的回答。我認爲這是做到這一點的方法。 – Thom

3

,儘量減少空間,你可以zip與Java的文本文件。爲什麼不在關閉它後將每個文件添加到zip文件中?在壓縮之後,您可以檢查壓縮文件的大小以查看您的累計存儲消耗量。

+0

謝謝!如此明顯,但我甚至沒有想過它 – Andrew

3

HTML將以高壓縮比輕鬆壓縮。考慮使用GZIPOutputStream來最小化文本文件佔用的空間量。

+0

謝謝。我會研究這個。 – Andrew

0

道歉的是有點偏題:

它是否必須在Java?這取決於你如何讓你的飼料數據,這聽起來像一個相當簡單的shell腳本工作對我來說(grepfgrep爲壓縮檢查關鍵字,gzip ......)

+0

我認爲最好堅持使用Java,因爲我相當熟悉Java,其他一切都是用Java編寫的 – Andrew

1
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 


public class TestFileWriter { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     FileWriter fileWriter= new FileWriter("test.txt"); 
     for (int i=0; i<1000; i++) { 
      fileWriter.write("a very long string, a very long string, a very long string, a very long string, a very long string\n"); 
      if ((i%100)==0) { 
       File file=new File("test.txt"); 
       System.out.println("file size=" + file.length()); 
      } 
     } 
     fileWriter.close(); 
     File file=new File("test.txt"); 
     System.out.println("file size=" + file.length()); 

    } 

} 

這個例子表明,如果您正在使用一個文件編寫器,您可以在寫入和打開編輯器的同時實時獲取其大小。如果你想節省空間,你可以壓縮流。

3

我繼續給亞倫的答案。你可以使用CountingOutputStream:使用CountingOutputStream包裝你的FileOutputStream,你就可以知道你已經寫了多少個字節。