Java 同时读取两个文本文件

Java read two text file at the same time

我是 Java 编程新手。这个真的太长了,但我只是想知道是否有可能像这样阅读两个文本文件? cmp2.txt 行多于 cmp1.txt 行。提前致谢!

String input1 = "C:\test\compare\cmp1.txt";
String input2 = "C:\test\compare\cmp2.txt";

BufferedReader br1 = new BufferedReader(new FileReader(input1));

BufferedReader br2 = new BufferedReader(new FileReader(input2)); 

String line1;
String line2;

String index1;
String index2;

while ((line2 = br2.readLine()) != null) {
    line1 = br1.readLine();

    index1 = line1.split(",")[0];
    index2 = line2.split(",")[0];
    System.out.println(index1 + "\t" + index2);

cmp1 包含:

test1,1
test2,2

cmp2 包含:

test11,11
test14,14
test15,15
test9,9

脚本输出:

test1   test11
test2   test14

Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:30)

预期输出:

test1   test11
test2   test14
        test15
        test9

发生这种情况是因为您读取第一个文件的次数与第二个文件中的行数一样多,但是您null-检查读取第二个文件的结果。在调用 split() 之前,您没有 null-检查 line1,这会导致 NullPointerException 当第二个文件的行数多于第一个文件时。

您可以通过在 line1 上添加 null 检查并在 null.

上将其替换为空 String 来解决此问题

这将读取两个文件完成,无论哪个文件更长:

while ((line2 = br2.readLine()) != null || (line1 = br1.readLine()) != null) {
    if (line1 == null) line1 = "";
    if (line2 == null) line2 = "";
    ... // Continue with the rest of the loop
}

我会建议

while ((line2 = br2.readLine()) != null &&
            (line1 = br1.readLine()) != null) {

这将逐行读取每个文件,直到其中一个文件到达 EOF。