2015-04-08 3 views
1

Я новичок в программировании на Java. Этого слишком долго читать, но мне просто интересно, возможно ли читать два текстовых файла? Строка cmp2.txt больше, чем cmp1.txt. Заранее спасибо!Java читает два текстовых файла одновременно

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 

Исключение в потоке "основного" java.lang.N ullPointerException в Test.main (Test.java:30)

ожидается выход:

test1 test11 
test2 test14 
     test15 
     test9 

ответ

0

Это происходит потому, что вы читаете первый файл столько раз, сколько строк во втором файле, но вы null -отчет результата чтения второго файла. Вы не делаете null -check 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 
} 
+0

переменная строка1, возможно, не была инициализирована – tuturyokgaming

+0

@tuturyokgaming Это потому, что вы не добавили '= null' в объявление. Он должен быть 'String line2 = null', а не просто' String line2'. – dasblinkenlight

+0

, так что это означает, что мой ожидаемый выход невозможен? – tuturyokgaming

0

Я хотел бы предложить

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

Это не будет читать построчно в каждом файле, пока ни один из файлы достигают EOF.

+0

Это правильно, но это не распечатывает данные строки2 до тех пор, пока не достигнет EOF – tuturyokgaming

Смежные вопросы