每行带有两组字符串的文件逐行读取的最快方法是什么?

17

我该如何以最快的速度逐行读取每一行,其中每一行都包含两个字符串?以下是一个示例输入文件:

Fastest, Way
To, Read
One, File
Line, By Line
.... can be a large file

即使字符串之间有空格,每行总是有两组字符串我需要的,例如“By Line”。

目前我正在使用:

FileReader a = new FileReader(file);
            BufferedReader br = new BufferedReader(a);
            String line;
            line = br.readLine();

            long b = System.currentTimeMillis();
            while(line != null){

这样是否足够高效,或者是否有更高效的方法可以使用标准JAVA API(请不要使用外部库)?感谢任何帮助!


1
任何形式的缓存读取都可能比您从文件读取的驱动器的寻道时间快得多。 - biziclop
3个回答

40

这得看你说“高效”时是指什么。从性能角度来看,它是可以的。如果你问的是代码风格和大小,我个人几乎和你一样,只有一个小修正:

        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while((line = br.readLine()) != null) {
             // do something with line.
        }

读取标准输入的Java 6提供了另一种方法。使用Console类及其方法

readLine()readLine(fmt, Object... args)


2
import java.util.*;
import java.io.*;
public class Netik {
    /* File text is
     * this, is
     * a, test,
     * of, the
     * scanner, I
     * wrote, for
     * Netik, on
     * Stack, Overflow
     */
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(new File("test.txt"));
        sc.useDelimiter("(\\s|,)"); // this means whitespace or comma
        while(sc.hasNext()) {
            String next = sc.next();
            if(next.length() > 0)
                System.out.println(next);
        }
    }
}

结果如下:
C:\Documents and Settings\glowcoder\My Documents>java Netik
this
is
a
test
of
the
scanner
I
wrote
for
Netik
on
Stack
Overflow

C:\Documents and Settings\glowcoder\My Documents>

1
如果您想要分离两个字符串集,可以按照以下方式进行:
BufferedReader in = new BufferedReader(new FileReader(file));
String str;
while ((str = in.readLine()) != null) {
    String[] strArr = str.split(",");
    System.out.println(strArr[0] + " " + strArr[1]);
}
in.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接