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

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?
 
fastjack

fastjack

Top Contributor
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.
 
M

Melamed

Gast
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!";
 
faetzminator

faetzminator

Gesperrter Benutzer
Gleiche Partition ;) ? (Nicht etwa [c]/home/[/c] auf einer anderen Partition als [c]/[/c]?)
 
M

Melamed

Mitglied
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?
 
faetzminator

faetzminator

Gesperrter Benutzer
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...
 
M

Melamed

Mitglied
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 ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
N Datentypen If-Statement wird "übersprungen" Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Java wird nicht gefunden Allgemeine Java-Themen 32
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
O Programm wird einfach "gekillt" Allgemeine Java-Themen 3
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
B Abfragenteil wird nicht aufgerufen Allgemeine Java-Themen 2
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
T Sicherheitshinweis - Zertifikat wird angefordert Allgemeine Java-Themen 5
L SetBounds wird vor dem Konstruktorcode aufgerufen - Wenn Startleiste links Allgemeine Java-Themen 1
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
G Tabelle wird nicht richtig dargestellt Allgemeine Java-Themen 9
HarleyDavidson Threads ProgressMonitor wird nicht angezeigt! Allgemeine Java-Themen 6
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
A Long variable wird negativ??? Allgemeine Java-Themen 1
J CSV Datei wird ungewollt umformatiert Allgemeine Java-Themen 5
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
E Java Editor Klasse wird nicht weiter ausgeführt Allgemeine Java-Themen 4
S Java Applet wird dauerhaft blockiert Allgemeine Java-Themen 1
I Datei wird nicht richtig gelöscht Allgemeine Java-Themen 7
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
D ActionListener wird mit jedem Mal öfter aufgerufen Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
A Threads Log4J Logger wird "überschrieben" Allgemeine Java-Themen 3
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
J batch datei wird nicht aufgerufen Allgemeine Java-Themen 11
M Datei wird nicht vollständig geschrieben (FileOutputStream, OutputStreamWriter, Encoding) Allgemeine Java-Themen 6
P OSGi - Bundle-Methode wird nicht aufgerufen Allgemeine Java-Themen 3
S Antlr Grammatik übersetzt ohne Fehler, dennoch wird Zahl nicht als Eingabe erkannt Allgemeine Java-Themen 4
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8
J Slideshow wird im IE überblendet Allgemeine Java-Themen 4
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
J Textdatei auslesen, die gerade benutzt wird Allgemeine Java-Themen 8
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
G Threads Timer wird unterbrochen Allgemeine Java-Themen 20
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
I HashMap key wird nicht erkannt trotz überschriebener equals/hashCode Methode Allgemeine Java-Themen 6
I Main wird nicht gefunden Allgemeine Java-Themen 3
M File einlesen während es beschrieben wird.. Allgemeine Java-Themen 6
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
C E-Mail: Authenticator.getPasswordAuthentication() wird nicht gerufen Allgemeine Java-Themen 2
F Interpreter-Fehler ClassCastException wird bei Schleifenaufruf geworfen Allgemeine Java-Themen 8
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13
E Schleife wird nicht ausgeführt!!! Allgemeine Java-Themen 8
C Schleife mit leerem Anweisungsblock wird trotz erfüllter Bedingung nicht verlassen Allgemeine Java-Themen 9
M Klassenvariable wird nicht überschrieben. Allgemeine Java-Themen 5
G Gleiche Packages in verschiedenen JAR Dateien - Welches Package wird verwendet? Allgemeine Java-Themen 5
Z Überschriebene setSelected() in ButtonGroup wird nicht aufgerufen Allgemeine Java-Themen 2
T Input/Output Verständnis: Wo wird das File auf die Festplatte gepackt? Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben