2010-02-11 122 views
3

我使用這是我從網上覆制以下基本函數讀取文本文件如何讓Java使用Scanner讀取非常大的文件?

public void read() 
{ 
    File file = new File("/Users/MAK/Desktop/data.txt"); 
    System.out.println("Start"); 
    try 
    { 
     // 
     // Create a new Scanner object which will read the data from the 
     // file passed in. To check if there are more line to read from it 
     // we check by calling the scanner.hasNextLine() method. We then 
     // read line one by one till all line is read. 
     // 
     Scanner scanner = new Scanner(file); 
     int lineCount = 0; 
     if (scanner == null) 
     { 
      System.out.println("Null File"); 
     } 
     else 
     { 
      System.out.println(scanner.toString()); 
     } 
     while (scanner.hasNextLine()) 
     { 
      String line = scanner.nextLine(); 

      System.out.println("Line " + lineCount +" contain : " + line); 
      lineCount++; 
     } 
     System.out.println("End of Try Bluck"); 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
     System.out.println("Exception Bluck"); 
    } 
    System.out.println("End"); 
} 
} 

它的正常工作與中小尺寸文件(其中包含10 20萬餘行的數據) 然而它無法使用包含50萬行的文件。我沒有收到錯誤(至少沒有看到任何人)。那麼發生了什麼?我應該在這裏做些什麼來準備這麼大的文件?

注意:我已經在運行帶有4 GB RAM的Windows Server 2008的測試機器上增加了2 GB的堆。但這並沒有多大幫助!

請任何人都可以告訴我我應該在這裏做什麼?


更新01

以下是輸出

開始

java.util.Scanner中[定界符= \ p {javaWhitespace} +] [位置= 0 ] [[] = []] [[]] [[]] [[]] [[]] [ E] [正後綴=] [負後綴=] [NaN st環= \ Q \ E] [無窮大串= \Q∞\ E]的嘗試Bluck

回答

5

最好去用的FileReader

+1

你是最棒的! :) BufferedReader解決了這個問題! 謝謝!謝謝!謝謝!謝謝!謝謝!謝謝!謝謝!謝謝!謝謝!謝謝!謝謝! – 2010-02-11 09:01:52

1

如果你沒有得到一個錯誤,它很可能只是

結束需要很長時間。磁盤是否仍然活動?你對控制檯輸出做了什麼 - 它停止了嗎?你說它「失敗了」,但你沒有說它實際上是如何表現的。你在看什麼?

內存不應該成爲一個問題,因爲你實際上沒有對線做任何事情 - 只需對它們進行計數並將它們寫入控制檯即可。在你的代碼

一個問題 - 你檢查scanner是否爲空,但不能可能是,因爲你使用了構造函數調用返回的引用。你試圖應付什麼情況?對於BufferedReader中

+0

我想它的服用時間長,但產量已表明這意味着它的完成工作的最後一個print語句的結果。這個類應該是我的程序的一部分,它需要處理每一行然後把它放在一個新文件中。任何想法該怎麼辦? – 2010-02-11 07:22:38

相關問題