Swing Originaldatei wird gelöscht, anstatt mit temporärer überschreiben (Ubuntu)

  • Themenstarter Themenstarter Melamed
  • Beginndatum Beginndatum
M

Melamed

Gast
Hallo!
Ich habe mir ein kleines Programm in Java geschrieben, mit dem ich bestimmte HTML-Tags entweder ersetzte oder lösche.
Das ganze lief auf meinem Ubuntu-Rechner ganz gut - unter Windows gabs auch keine Probleme.

Jetzt habe ich mein Notebook neu aufgesetzt (wieder Ubuntu) um ein bisschen mehr experimentieren zu können.

Kurz die Funktionsweise des Programms (leider habe ich den Original-Sourcecode nicht da, der ist auf meiner Backup-Festplatte):
Ich öffne die Datei und lese Zeile für Zeile.
Diese Zeile wird in eine temporäre Datei geschrieben und bei diesem Vorgang suche ich auch nach den Tags, die ggf. verändert werden.
Nachdem alles abgeschlossen ist lösche ich die Originaldatei und überschreibe den Pfad mit der Temporären.

Derzeit löscht er mir nur die Originaldatei, ohne sie zu ersetzen. Das Programm schreibt aber keinen Fehler, sondern läuft angeblich tadellos.
Die temporäre Datei wird soweit ich weiß im tmp-Verzeichnis erstellt, bei dem ich jetzt auch die Rechte überprüft habe... Da ist alles korrekt.
Probiert habe ich mit der "offiziellen JDK" und der Open JDK - beide bringen dasselbe Ergebnis.
Wie kann das sein, dass es zuvor geht und jetzt nicht mehr?
 
Besorge doch mal den Quelltext und poste die entsprechenden Passagen. Wenns ein Bug ist, kannst Du ihn bestimmt bei Unbuntu oder dem jeweiligen JDK Hersteller melden, oder dannach suchen. Ich hatte auch eine zeitlang Schwierigkeiten mit dem diablo-JDK, aber mir wurde in den entsprechenden Foren gut geholfen.
 
Ich habe jetzt den Code wieder...

Warum löscht er mir die Originaldatei nur, ohne sie zu ersetzen?
Ich habe gestern noch im tmp-Ordner nachgeschaut - die temporäre Datei wird dort erzeugt.

Java:
String ausgabe = "";
        try {
            BufferedReader in = new BufferedReader(new FileReader(path));
            File tmpFile = createTempFile("foobar", "txt");
            BufferedWriter out = new BufferedWriter(new FileWriter(tmpFile));
            String zeile = "";
            //Properties prop = new Properties();
            //prop.load(new FileInputStream(propFile));
            //Set<Object> keys = prop.keySet();
            TreeMap<String, String> tree = new TreeMap<String, String>();

            java.util.LinkedList <String> messages = new java.util.LinkedList<String>();
            java.util.LinkedList <Integer> numeri   = new java.util.LinkedList<Integer>();


            while ((zeile = in.readLine()) != null) {

                for (int i = 1; i <=Integer.parseInt(jAmount.getText()); i++) {
                    if (zeile.contains("<labjegyzet" + i + ">")) {
                        zeile = zeile.replaceAll("<labjegyzet" + i + ">", "<small><sup>" + i + "</sup></small>");
                        messages.add("<labjegyzet" + i + "> replaced with <small><sup>" + i + "</sup></small>\n");
                        numeri.add(i);
                    }
                    if (zeile.contains("</labjegyzet" + i + ">")) {
                        zeile = zeile.replaceAll("</labjegyzet" + i + ">", "");
                        messages.add("</labjegyzet" + i + "> removed\n");
                    }
                }
                out.append(zeile + "\n");
            }
            out.close();
            in.close();
            new File(path).delete();
            new File(tmpFile.getPath()).renameTo(new File(path));
            ausgabe = "Success!";
 
Bei mir ist nur die Boot-Partition ausgelagert, aber an diese Idee habe ich auch schon gedacht.
Der Pfad stimmt auf jeden Fall, das habe ich jetzt auch nachgeprüft.
Woran denkst du konkret?
 
Many aspects of the behavior of this method are inherently platform-dependent: The rename operation might not be able to move a file from one filesystem to another, it might not be atomic, and it might not succeed if a file with the destination abstract pathname already exists. The return value should always be checked to make sure that the rename operation was successful.
Ich weiss, dass das Verschieben von einer auf die andere Partition zumindest unter Windows (NFTS) oder Linux (damals ext3) nicht funktionierte. Da müsstest du die Datei "von Hand" kopieren und danach löschen...
 
Danke euch beiden für die Hilfe 🙂
Ich hab das Problem jetzt anders gelöst. Anstatt die tmp-Datei irgendwo in einem (möglicherweise nicht einmal verfügbaren tmp-Ordner) zu speichern nehme ich mir den Pfad und erstelle die Datei am gleichen Ort wie das Original:

Java:
private String tmpath(String path) {
        String changer = path;
        if(changer.contains(".txt") || changer.contains(".TXT"))
            return changer.replaceAll(".txt", "temp.txt");
        else
            return changer + "temp.txt";
    }

Java:
BufferedReader in = new BufferedReader(new FileReader(path));
            String s_tmpath = new String();
            s_tmpath = tmpath(path);
            File tmpFile = new File(s_tmpath);
            BufferedWriter out = new BufferedWriter(new FileWriter(tmpFile));

und es läuft ^^
 

Zurück
Oben