2010-02-11 123 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

相关问题