2016-06-26 8 views
-2

Ich versuche, 2 Dateien Zeile für Zeile zu vergleichen. Nachdem dieser Vergleich durchgeführt wurde, werden alle Zeilen in eine dritte Datei kopiert und sie werden als "in beiden Dateien vorhanden" identifiziert; "ohne DateiA"; oder "ausschließlich von Datei B". Dank der Hilfe von @nono und @Andreas läuft mein Code, aber noch wird nichts in die Ausgabedatei geschrieben.Vergleichen von Zeilen in 2 Dateien in Java


 public static void compareFileLines(String fileLocA, String fileLocB, String fileLocC) throws IOException{ 
     //fileLoc'X' is the filepath 
     try{ 
     BufferedReader reader1 = new BufferedReader(new FileReader(fileLocA)); 
     BufferedReader reader2 = new BufferedReader(new FileReader(fileLocB)); 
     PrintWriter writer = new PrintWriter(new File(fileLocC)); 

     String []linesA = new String [fileLenght(fileLocA)]; //filelenght checks number of lines on a file 
     String []linesB = new String [fileLenght(fileLocB)]; 

     for (int i=0; i< linesA.length-1; i++){ 
     linesA[i]= reader1.readLine(); 
     } 
     for (int i=0; i< linesB.length-1; i++){ 
      linesB[i]= reader2.readLine(); 
     } 
     boolean finder = false;   
     for (int n =0; n<linesA.length-1; n++){ 
      for(int m=0; m<linesB.length-1; m++){ 
       if (linesA[n].equals(linesB[m])){ 
        finder = true; 
        writer.append(linesA[n]+" Is in both files \n"); 
       } 
       if (finder == false){ 
        writer.append(linesA[n]+ "Is exclusive of File1");      
      } 
       finder = false; 
     } 
     } 
     finder = false; 
     for (int n=0; n< linesB.length -1; n++){ 
      for (int m=0; m< linesA.length -1; m++){ 
       if (linesB[n].equals(linesA[m])){ 
        finder = true; 
       } 

      } 
      if (finder == false){ 
       writer.append(linesB[n] +" is exclusive of File2"); 
      } 
      finder = false; 
     } 


    }finally{   

    }  

} 
+0

Anruf 'hasNextLine()' 'vor dem Aufruf von nextline()'. 'nextLine()' gibt bei EOF nicht null zurück wie 'BufferedReader.readLine()'. Da Sie nur Zeilen lesen, wechseln Sie zu 'BufferedReader', weil es * viel * besser als' Scanner' ist. – Andreas

+3

... und tue ** nicht ** Vergleiche String Objekte mit '==', benutze stattdessen 'equals()' Methode –

+0

Vielen Dank für deine Antwort. Ich tat, wie Sie sagten, ich habe bufferedReader stattdessen verwendet, aber es sagt, dass erwartet, ein Reader-Objekt anstelle von Datei (der Konstruktor bufferedReader (Datei) ist nicht definiert) –

Antwort

0

Der BufferedReader Konstruktor kann eine FilReader akzeptieren. Der FileReader kann eine Datei oder den Pfad akzeptieren.

FileReader fr = neuer FileReader ("text.txt");

BufferedReader br = neuer BufferedReader (fr);

Zum Schleifen verwenden: String s; while ((s = br.readLine())! = Null) { ... }

Verwandte Themen