将扫描仪用于多行文本文件

时间:2015-02-10 05:50:29

标签: java java.util.scanner

我正在研究一个读取文本文件的程序。我必须为文件的每一行执行一个单独的方法。我可以这样做:

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

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

然后将后两行放在一个循环中,这样我就可以解析每一行的标记。但我想知道是否有任何方法可以做到这一点,而无需每次迭代都实例化一个新的扫描仪对象。

3 个答案:

答案 0 :(得分:2)

使用一台扫描仪读取每一行的Java代码:

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

答案 1 :(得分:1)

您可以将Reader和扫描仪合并,只需将Reader传递给扫描仪,然后循环

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

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

答案 2 :(得分:0)

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

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

替代解决方案

如果您想使用 BufferedReader 阅读文件line by line,这是一个不错的方法,

由于Scanner用于从流内容中解析令牌,因此BufferedReadersynchronizedScanner不是。

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

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