2009-10-26 9 views
0

Я в замешательстве. Я пытаюсь зациклировать хотя бы 2 файла, просматривая первый токен в каждой строке первого файла и сравнивая его с третьим токеном каждой строки второго файла. Здесь логическая структура в виде вложенного в то время цикла:java inested while loop using readline

BufferedReader reader1 = new BufferedReader(new InputStreamReader(new FileInputStream(fromFile1))); 

BufferedReader reader2 = new BufferedReader(new InputStreamReader(new FileInputStream(fromFile2),"EUC-JP")); 

String line1, line2 = null; 
String temp1, temp2 = null; 

while ((line1=reader1.readLine()) != null) 
{ 
    StringTokenizer st1 = new StringTokenizer(line1); 
    temp1 = "U"+st1.nextToken(); 
    while((line2=reader2.readLine()) != null) 
    { 
     StringTokenizer st2 = new StringTokenizer(line2); 
     temp2 = st2.nextToken(); 
     temp2 = st2.nextToken(); 
     temp2 = st2.nextToken(); 
     if(temp2.equals(temp1)); 
     { 
      System.out.println(temp1+" "+temp2); 
     } 
    } 
} 

Тем не менее, все, что я вижу в выходе первый маркер из первой строки первого файла и третьего маркера от каждой строки второй файл повторяется 6000 (длина файла 2) раз независимо от того, были ли они «равными» или нет. Это связано с их различными кодировками? Я вижу, что это влияет на тест равных, но почему не работает поведение цикла?

Приветствия, Brandon

ответ

4

это; позади, если

if(temp2.equals(temp1)); 

Но это не будет, вероятно, работать в любом случае, как и следовало ожидать, так как вы должны вновь открыть файл 2 в пределах внешнего контура, в противном случае он будет работать правильно только в первой строке файла 1

+0

Ах, спасибо ammoQ, что все исправлено. Я относительно новичок в файле io в java. Почему я должен открыть файл во внешнем цикле? – Brandon

+0

Брэндон: Потому что после первого запуска внутренней петли читатель2 уже находится в конце потока; поэтому в следующий раз, когда вы войдете во внутренний цикл while, readLine() вернет null. Самый простой (хотя, вероятно, не самый быстрый) способ закрыть это и закрыть его снова. –

+0

Ах, конечно. Еще раз спасибо! – Brandon