4

我有一个奇怪的问题,我有一个名为 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);        
    }
}

你能告诉我原因吗?

4

1 回答 1

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') 或紧跟换行符的回车符中的任何一个终止的。

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

试一试,看看它有什么作用。

于 2012-05-23T08:05:54.373 回答