Java同时读取两个文本文件

时间:2015-04-08 02:48:29

标签: java io bufferedreader

我是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
  

线程中的异常" main" Test.main(Test.java:30)

中的java.lang.NullPointerException

预期产出:

test1   test11
test2   test14
        test15
        test9

2 个答案:

答案 0 :(得分:0)

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

您可以通过在null上添加line1检查来解决此问题,并在其String时将其替换为空null

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

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

答案 1 :(得分:0)

我建议

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

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