如何使用java代码读取文件的所有行?

时间:2012-05-23 07:45:01

标签: java file-io java.util.scanner

我有一个奇怪的问题,我有一个名为transactionHandler.log的日志文件。它是一个非常大的文件,有17102行。这是我在linux机器上执行以下操作时获得的:

wc -l transactionHandler.log
17102 transactionHandler.log

但是,当我运行以下java代码并打印行数时,我得到2040作为o / p。

import java.io.*;
import java.util.Scanner;
import java.util.Vector;

public class Reader {

    public static void main(String[] args) throws IOException {     
        int counter = 0; 
        String line = null;

         // Location of file to read
        File file = new File("transactionHandler.log");

        try {

            Scanner scanner = new Scanner(file);

            while (scanner.hasNextLine()) {
                line = scanner.nextLine();
                System.out.println(line);
                counter++;                    
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }           
        System.out.println(counter);        
    }
}

你能告诉我原因吗。

1 个答案:

答案 0 :(得分:8)

据我所知,Scanner默认使用\n作为分隔符。也许您的文件有\r\n。您可以通过调用scanner.useDelimiter或(并且这更好)修改此操作,尝试使用此替代方法:

import java.io.*;

public class IOUtilities
{
    public static int getLineCount (String filename) throws FileNotFoundException, IOException
    {
        LineNumberReader lnr = new LineNumberReader (new FileReader (filename));
        while ((lnr.readLine ()) != null) {}

        return lnr.getLineNumber ();
    }
}

根据LineNumberReader的文件:

  

任何一个换行都认为一行被终止   ('\ n'),回车符('\ r')或随后的回车符   立即用换行符。

因此它非常适合具有不同行终止字符的文件。

试一试,看看它的作用。