2011-08-18 50 views
0

我不知道如何做到以下幾點:我想處理一個真正巨大的文本文件(差不多5千兆字節)。由於我無法將文件複製到臨時存儲器中,因此我想要閱讀前500行(或者與內存匹配的內容,我對此還不確定),然後對其進行處理,然後繼續下一個500行我完成了整個文件。閱讀羣文件中的行數

你能發表一個你需要的「循環」或命令的例子嗎?因爲我嘗試過的所有方式都是從頭開始的,但我想在完成前面500行後繼續。

幫助讚賞。

+0

你想它是在閱讀後修改的文本或你基本上是進口的只讀目的的數據(即寫入修改後的文本回文件。)? –

+0

我希望適合特定模式的行被寫入到一個新文件中,以便最終我有一個新文件,其中包含與該模式匹配的原始文件中的所有行。原件不應該修改。 – Grrace

回答

1
BufferedReader br = new BufferedReader(new FileReader(file)); 
String line = null; 
ArrayList<String> allLines = new ArrayList<String>(); 

while((line = br.readLine()) != null) { 
    allLines.add(line); 
    if (allLines.size() > 500) { 
      processLines(allLines); 
      allLines.clear(); 
    } 
} 

processLines(allLines); 
+0

謝謝。我有一個關於你的例子的問題:_allLines.size()> 500_指的是我添加的實際行數(可以說,如果我加3000,這將是大小?)?我一直認爲「大小」是指ArrayList的總長度,但如果我理解正確,它是元素的數量......?這真的幫助我很多! – Grrace

+0

您提到一次只能閱讀500行... –

+0

對不起,我的評論還沒有完成。我不知道緊急返回不會創建新行;-) – Grrace

0

好吧,您在上面的評論中指出,您只想保留某些行,並根據某些邏輯將它們寫入新文件。你可以一次讀一行,決定是否保留它,如果是這樣寫入新文件。這種方法將使用很少的內存,因爲你一次只能在內存中保存一行。下面是做到這一點的一種方法:

BufferedReader br = new BufferedReader(new FileReader(file)); 
String lineRead = null; 
FileWriter fw = new FileWriter(new File("newfile.txt"), false); 

while((lineRead = br.readLine()) != null) 
{ 
    if (true) // put your test conditions here 
    { 
     fw.write(lineRead); 
     fw.flush(); 
    } 
} 
fw.close(); 
br.close();