2012-07-26 104 views
0

我正在嘗試讀取一個巨大的文件(> 1GB),我在考慮將它作爲隨緩衝讀取器隨機訪問的文件讀取會很有效。用緩衝讀取器讀取隨機訪問文件

我需要逐行讀取文件中的行,並解析它

不過是對Java IO的API,我不知道我該怎麼做..

我感謝你的幫助。

+0

您只能讀取一個隨機字節,而不是隨機字符(因爲它們可能會有所不同)您要做的是這些類不能很好地協同工作? – 2012-07-26 15:21:12

+0

你想做什麼?你需要閱讀整個文件嗎?在文件中間以固定偏移量讀取內容?閱讀你在文件中間搜索的內容?你只是試圖讀取整個文件「更快」嗎?問:你試圖解決什麼問題? – paulsm4 2012-07-26 15:23:39

+0

我需要逐行讀取文件並解析它,我需要它儘可能快 – user1203861 2012-07-26 15:29:44

回答

3

您可以使用Java的的BufferedReader這個:

BufferedReader reader = new BufferedReader(new FileReader(fileName)); 
String line; 
while ((line = reader.readLine()) != null) { 
    // Do some stuff with the line 
} 

fileName是路徑要讀取的文件。

+1

請注意'FileReader'假定給定文件使用默認字符編碼進行編碼。否則無法告訴它。 – seh 2012-07-26 15:58:02

0

您是否需要閱讀所有內容並從頭開始?如果您知道可以從哪個字節開始,則可以使用RandomAccessFile跳轉到文件的不同部分。我認爲這是尋求功能。

+0

我不在乎在哪裏開始,只要我結束閱讀整個文件行 – user1203861 2012-07-26 16:23:38

+0

然後我瘦jayeff答案是你最好的選擇 – RNJ 2012-07-26 16:39:43

-1

雖然在java中完全可行的,我想根據我的經驗表明:

如果你在Unix平臺上,你可以使用外部的shell腳本,通過日誌的綠帶搜索。 sed非常適合此目的。具體用法如下:http://www.grymoire.com/Unix/Sed.html

無論何時需要通過日誌文件讀取/ grep,通過java文件調用shell腳本。

如何?

1)在您的java代碼中,使用ProcessBuilder類。它可以在shell腳本作爲對Arg的構造器

ProcessBuilder obj = new ProcessBuilder("FastLogRead.sh");

2)過程

Process process = obj.start();

3)你可以通過這個閱讀這個shell的輸出,直接在BufferedRead創建對象

BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));

優點:

通過平均加速執行。 10倍(我尋遍各地4GB的日誌文件)

缺點:

一些開發商不喜歡引進輕量的shell腳本中的java的領域,因此想去Java的RandomAccessFile。這是有道理的。

對於您的情況,您可以選擇標準化和性能。