2015-02-10 59 views
4

我正在处理读取文本文件的程序。我必须为文件的每一行执行一个单独的方法。我可以做这样的事情:对多行文本文件使用扫描仪

LineNumberReader myReader = new LineNumberReader(new FileReader("filename")); 

Scanner scanner = new Scanner(myReader.readLine()); 
while (scanner.hasNext()) { ... } 

并把后者两条线在一个循环中,所以我可以解析每条线的标记。但我想知道是否有任何方法可以做到这一点,而无需在每次迭代中实例化一个新的扫描器对象。

+0

您可以直接使用'Scanner'类。 – 2015-02-10 05:54:19

回答

2

Java代码来读取每一行与一台扫描仪:

Scanner myScanner = new Scanner(new File("filename")); 
while (myScanner.hasNextLine()) 
{ 
    String line = myScanner.nextLine(); 
    ... 
} 
1

您可以结合阅读器和扫描仪,只是通过读者进入扫描仪,然后循环

LineNumberReader myReader = new LineNumberReader(new FileReader("filename")); 

Scanner myScanner = new Scanner(myReader); // <== scanner uses Reader 
while (myScanner.hasNextLine()) { 
    String line = myScanner.nextLine(); 
} 
+0

我喜欢你的评论;) – MaxZoom 2015-02-10 20:29:09

0

@Max Zoome的例子是一个很好的方法,但它有一个问题,这个循环将会到infinite所以我建议你使用以下版本:

String line; 
while (myScanner.hasNextLine() && (line=myScanner.nextLine()!=null)) 
{ 
    // Do whatever you want to do 
} 

替代解决方案

当你想使用的BufferedReader是一个很好的方法来读取文件line by line

由于Scanner用于从数据流中的内容解析令牌以及BufferedReader是​​并且Scanner不是。

FileReader in = new FileReader("yourFileName"); 
BufferedReader br = new BufferedReader(in); 

while ((line=br.readLine()) != null) { 
    System.out.println(line); 
} 
in.close();