我正在嘗試讀取一個巨大的文件(> 1GB),我在考慮將它作爲隨緩衝讀取器隨機訪問的文件讀取會很有效。用緩衝讀取器讀取隨機訪問文件
我需要逐行讀取文件中的行,並解析它
不過是對Java IO的API,我不知道我該怎麼做..
我感謝你的幫助。
我正在嘗試讀取一個巨大的文件(> 1GB),我在考慮將它作爲隨緩衝讀取器隨機訪問的文件讀取會很有效。用緩衝讀取器讀取隨機訪問文件
我需要逐行讀取文件中的行,並解析它
不過是對Java IO的API,我不知道我該怎麼做..
我感謝你的幫助。
您可以使用Java的的BufferedReader這個:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
// Do some stuff with the line
}
fileName
是路徑要讀取的文件。
請注意'FileReader'假定給定文件使用默認字符編碼進行編碼。否則無法告訴它。 – seh 2012-07-26 15:58:02
您是否需要閱讀所有內容並從頭開始?如果您知道可以從哪個字節開始,則可以使用RandomAccessFile跳轉到文件的不同部分。我認爲這是尋求功能。
我不在乎在哪裏開始,只要我結束閱讀整個文件行 – user1203861 2012-07-26 16:23:38
然後我瘦jayeff答案是你最好的選擇 – RNJ 2012-07-26 16:39:43
雖然在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
。這是有道理的。
對於您的情況,您可以選擇標準化和性能。
您只能讀取一個隨機字節,而不是隨機字符(因爲它們可能會有所不同)您要做的是這些類不能很好地協同工作? – 2012-07-26 15:21:12
你想做什麼?你需要閱讀整個文件嗎?在文件中間以固定偏移量讀取內容?閱讀你在文件中間搜索的內容?你只是試圖讀取整個文件「更快」嗎?問:你試圖解決什麼問題? – paulsm4 2012-07-26 15:23:39
我需要逐行讀取文件並解析它,我需要它儘可能快 – user1203861 2012-07-26 15:29:44