2016-07-04 5 views
0

Ich habe zwei TXT-Dateien mit einer bestimmten Struktur. Es sollte einige Zeilen und Zeilen mit einigen Daten geben. Etwas wie folgt aus:Vergleichen von Dateien mit einer bestimmten Struktur in Java

@RELATION Table 

@RECORD 1 
ID '5' 
SOMETHING '10' 

Der Punkt ist, kann es 10 ‚leer‘ Zeilen sein in einer Datei, und es kann keine in der zweiten und wenn die Daten gleich, es sollte keine Rolle spielen. Irgendwelche Ideen, wie man es effektiv mit großen Dateien macht?

+2

Idee: tun Sie das nicht in Java. Es gibt Tools wie "BeyondCompare", die nur zum Vergleichen von Dateien existieren. und das mit allen Arten von Regeln. Sie wissen, am Ende: den Vergleich von Dateien ist keine triviale Aufgabe. Ich bin mir ziemlich sicher, dass es ein ernstes Unterfangen wäre, dieses Rad neu zu erfinden. und wenn möglich: vermeide es. – GhostCat

+0

Ich stimme Jägermeister zu. Vor allem, wenn Sie die genauen Unterschiede wissen wollen, ist es in diesem Fall sehr schwer. Wenn Sie nur wissen wollen, ob sie gleich sind, mit Ausnahme von Leerzeilen, dann ist es wahrscheinlich nicht so schwierig, da Sie nur alle leeren Zeilen überspringen müssen. –

+0

Es gibt viele Diff-Tools, die Sie dafür verwenden können. –

Antwort

0

BufferedReader sollte aus der Datei zu lesen, verwendet werden, einen Filereader an den Konstruktor Versorgung: https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

So werden Sie zwei von ihnen haben, eine für jede Datei.

Haben sie eine „Endlosschleife“ wie: while (true) {}

In diesem Container Schleife, sollten Sie zwei interne Schleifen haben, eine für jede Datei.

In jeder internen Schleife, mit der Methode readLine() sollten Sie den Cursor auf die nächste Zeile vorrücken.

declare dies außerhalb des Behälters Loop:

String lineFromFileA, lineFromFileB; 

und dann:

while((lineFromFileA = bufferedReaderA.readLine()) != null){ 
    if(!lineFromFileA.isEmpty()) 
     break; 
} 

das gleiche mit lineFromLineB.

eine Alternative zu der obigen Schleife ist:

while((lineFromFileA = bufferedReaderA.readLine()) != null && lineFromFileA.isEmpty()); 

Nach den beiden inneren Schleifen, die beide lineFromFileA und lineFromFileB sind entweder null oder einen Wert hat, der nicht eine leere Zeichenfolge ist.

Wenn beide null sind, dann sind Sie mit dem Vergleich fertig, die beiden Dateien sind gleich und Sie können von der Funktion true zurückgeben.

Wenn eins null enthält und das andere nicht, gibt false zurück. Die Dateien sind unterschiedlich.

Wenn beide nicht null sind, dann überprüfe die equals() -Methode, wenn die beiden Strings identisch sind. Wenn sie nicht identisch sind, gib false von der Funktion zurück. Wenn sie gleich sind, nichts tun, behandelt die nächste Iteration der Containerschleife die nächste Zeile.