Inhalt einer Datei sortieren funktioniert nicht immer

dastool

Erfahrenes Mitglied
Guten Abend liebe Java-Gemeinde,
ich mal wieder :-(

Wie im Titel schon gesagt, dass das sortieren nicht immer funktioniert.
Die Zeilen werden einzeln gelesen, in einem Array gespeichert, sortiert und sollten, nachdem die Datei neu angelegt wurde, reingeschrieben werden.

Insgesamt sind es in meinem Programm 4 Dateien in dennen das nach jeder Eingabebestätigung passieren soll.

Ab und an werden alle Arrays sortiert und doppelte Einträge verhindert.
Leider passiert es zu oft, dasses dann solche gibt, und diese bleiben bestehen, solalnge ich die nicht manuell lösche.
Hier ist der code für die dafür verantwortliche Klasse:

PHP:
package easybuy;
import java.io.*;
import java.util.*;

public class EasyDateischreiben {
    private ArrayList lines;
    private Iterator it;
    
    public void schreiben(String dateiname, String eingabe)
    throws IOException {
        String input, temp;
        
        temp = sortieren(dateiname, eingabe);
        loeschen(dateiname);
        PrintWriter out;
        out = new PrintWriter(new FileWriter(dateiname));
        out.print(temp+"\n");
        out.close();
    }
    
    private void loeschen(String dateiname)
    throws IOException {
        File f = new File(dateiname);
        f.delete();
        f.createNewFile();
    }
    
    private boolean vergleichen(String eingabe, String dateiname)
    throws FileNotFoundException, IOException {
        boolean b=false;
        lines = EasyArray.arrayLesen(dateiname);
        it = lines.iterator();
        while (it.hasNext()) {
            String line = (String) it.next();
            b = line.equals(eingabe);
            
        }
        return b;
    }
    
    private String sortieren(String dateiname, String eingabe)
    throws IOException, FileNotFoundException {
        boolean b;
        String temp = EasyDateilesen.lesen(dateiname);
        if(b = vergleichen(eingabe, dateiname)) {
            temp = temp.concat(eingabe);
        }
        String[] strarray = new String[] { temp };
        Arrays.sort(strarray);
        eingabe = strarray[0];
        return eingabe;
        
    }
    
}

Klasse EasyArray
PHP:
package easybuy;
import java.io.*;
import java.util.*;

public class EasyArray {
    public EasyArray() {
    }

    public static ArrayList arrayLesen(String dateiname)
    throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader(dateiname));
        String line = "";
        ArrayList lines = new ArrayList();
        line = in.readLine();
        while (line != null) {
            lines.add(line);
            line = in.readLine();
        }
        in.close();
        return lines;
    }



}
Ich hab schon versucht mit der "Step Into" funktion von NetBeans rauszufinden worans liegt... aber anscheinend ist meine JFrame zu gross... Inklusive so manch andere Klasse die ich angelegt hab :-)
 
Zuletzt bearbeitet:
Ich Schlaumeier :-(

Es kommen simple Wörter wie "Apfel" "Weizen" oder "Zahn" in die Strings.
Ein String enthällt dementsprechend immer nur ein wort, ausser diesem, der aus der Datei gelesen und übergeben wird.

So sollte dann nach alphabetischer Reihenfolge sortiert werden.
Apfel
Banane
Dose
etc.

Leider klappt das nicht immer.
Mal wird sortiert, mal alles durcheinandergewürfelt gespeichert.
Das Problem mit den Doppeleinträgen (die in dem jetzigen fall nicht wirklich funktioniert) hab ich gelöst bekommen.
 
Hi,

wird die Datei auch jedes mal wirklich neu geschrieben oder kann es sein daß er vorher schon bei deiner Funktion irgendwo rausfliegt?

Gruss,

Bugs
 
Ich hab nichts gefunden um nur den Ihnalt zu löschen und neu zu schreiben, somit Ja, sie wird immer neu geschrieben, sobald eine Eingabe vorhanden ist.

Die ganze Sache ist an ein JFrame gebunden, in dem per Choice auswahlen vorhanden sind. Sollte dort bestimmte Auswahlen nichti n dem Items sein, hat man die gelegenheit dies Nachzutragen. Bei der Auswertung der Eintragungen in den Textfields wird dann jeweils an die entsprechende Datei der String reingeschrieben und mit dieser Klasse eben bearbeitet.
 
Zurück