Sascha's Wiki

Unterschiede zw. zwei Textdateien darstellen mittels diff-utils library

Import

Die Library ist hierüber zu finden java-diff-utils Download und muss anschließend als Library in Form eines Moduls im Projekt eingebunden werden.

Anschließend kann die diff-utils API verwendet werden.

Vorgehensweise

  • Auslesen der Textdateien
  • Vergleich der Textdateien
  • Ausgabe der Unterschiede

Auslesen der Textdateien

Unterschiede zwischen Textdateien werden zeilenweise überprüft. Daher müssen die Zeilen gelesen und und anschließend übergeben werden.

    private static List<String> fileToLines(String filename) {
        List<String> lines = new LinkedList<String>();
        String line = "";
        try {
            BufferedReader in = new BufferedReader(new FileReader(filename));
            while ((line = in.readLine()) != null) {
                lines.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return lines;
    }

Vergleich der Textdateien

Nachdem die Methode zum zeilenweise auslesen erstellt wurde, kann diese nun für zwei Textdateien angewandt werden.

Mittels der diff-Methode, welche die Library vorgibt, können diese beiden Listen nun zeilenweise verglichen werden.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            
            List<String> original = fileToLines("originalFile.txt");
            List<String> revised  = fileToLines("revisedFile.xt");

            difflib.Patch patch = DiffUtils.diff(original, revised);

            for (Delta delta : patch.getDeltas()) {
            
            System.out.println(delta);

            }
        } catch (NullPointerException e) {
            System.out.println("Patching nicht erfolgreich");
        }

Ausgabe der Unterschiede

Momentan werden die Unterschiede nur in der Konsole ausgegeben. Im folgenden Beispiel werden die Unterschiede sowohl in einem JTree als auch in einer jTextArea angezeigt. Die vorherig vorgestellte Action würde nun mit entsprechenden Ergänzungen wiefolgt aussehen:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        try {
            List<String> original = fileToLines("originalFile.txt");
            List<String> revised  = fileToLines("revisedFile.xt");


            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Data");
            DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);

            difflib.Patch patch = DiffUtils.diff(original, revised);

            jTree1.setModel(treeModel);

            for (Delta delta : patch.getDeltas()) {
                jTextArea1.append(delta.toString() + "\n");
                jTree1.setCellRenderer(new MyRenderer());
                rootNode.add(new DefaultMutableTreeNode(delta.toString()));
            }
        } catch (NullPointerException e) {
            System.out.println("Patching nicht erfolgreich");
        }
    }   

java/netbeans/diff-utils.txt · Zuletzt geändert: 2016/04/21 09:15 (Externe Bearbeitung)