file.delete() geht nicht

0plan

Bekanntes Mitglied
Hallo ich habe ein Problem, ich versuche eine .txt aus meiner Anwendung aus zu löschen. Bisher hatte ich da nie Probleme mit doch jetzt funktioniert es leider nicht immer. Warum es nicht IMMER funktioniert erklär ich jetzt:

Wenn ich z.B.

Java:
File f = new File("C:/test.txt");
f.delete();
aufrufe klappt es.

Versuch ich jedoch den folgendes:

Java:
File f = new File ("C:/"+textfieldA.getText()+".txt";

funktioniert es nicht. Ich verstehe die Ursache nicht, es wird auch keine Exception geworfen.
Hab schon überlegt ob die Ursache iwo anders im Programm liegt. Können laufende Threads diese Methode irgendwie behindern? Wenn ja, wieso funktioniert es dann ohne Übergabe des Dateinamen aus einem Textfeld?

Mfg
 
Hast du dir
Code:
"C:/"+textfieldA.getText()+".txt"
schonmal ausgeben lassen?
Woher der String kommt den du dem File übergibst ist egal.
 
Ja, habe ich. Die Ausgabe ist wie sie sein soll

Java:
System.out.println("C:/"+textfieldA.getText()+".txt"); // Ausgabe ist C:/test.txt
 
Dann ist es egal ob du
Code:
File f = new File("C:/test.txt");
oder
Code:
File f = new File ("C:/"+textfieldA.getText()+".txt");
aufrufst.
Poste vllt mal nen bissl mehr code.
 
Löschen tut er es allerdings nur ohne Stringübergabe aus dem Textfeld. Hab vorher auch gedacht es ist egal, weil es das auch immer war 😛
 
So sieht die Methode aus, ganz simpel
Java:
public void deleteGroup(){
		
		try{
			File f = new File("C:/Testordner/"+textfeldA.getText()+".txt");
			f.delete();
		}catch(IOException e){
			textfeldB.setText("Datei wurde nicht gelöscht");
		}
	}
 
Dann existiert die Datei wohl nicht. Oder du darfst sie nicht löschen.
SecurityException - If a security manager exists and its SecurityManager.checkDelete(java.lang.String) method denies delete access to the file
Gib doch bitte die Exception aus. [c]e.printStackTrace()[/c]
 
kommt denn eine IOException? gib diese aus,

baue den String zusammen, setze daneben den fertigen String, vergleiche die beiden mit equals, was kommt raus?
erstelle zu beiden File-Objekte, rufe jeweils exists() auf bzw. gib das aus,
versuche erst mit dem zusammengesetzen zu löschen, wenn das wie erwartet weiterhin nicht geht, dann mit dem anderen File-Objekt löschen,
gib danach wieder exists() von beiden aus
 
K hab alles ausgeführt was SlaterB gesagt hat. Die beiden Strings sind equal zueinander(liefert true)
Beide FileObjekte liefern excists(true) zurück.

Es wird beim Löschvorgang keine Exception ausgeworfen und bei beiden File Objekten wird nun nichts gelöscht?!
 
die datei ist nicht zufällig geöffnet oder? du könntest das z.b. mit lockhunter oder unlocker testen.

@Slater: bei File#delete() wird doch gar keine ioe geworfen ???:L
 
Zuletzt bearbeitet:
Es wird beim Löschvorgang keine Exception ausgeworfen und bei beiden File Objekten wird nun nichts gelöscht?!
kommst du irgendwie zum vorherigen Zustand zurück wo das Löschen noch geht?
durchaus möglich dass es allein am Zeitpunkt der Ausführung im Programm liegt

wie nrg schon sagt, sind Streams von dir beteiligt? close()?
 
Es sind zu dem Zeitpunkt bei dem die Methode aufgerufen wird keine Streams offen, diese werden bei den benötigten Methoden direkt im Anschluss .close() gesetzt. Es wird wie NRG sagt keine IOE geworfen doch auch mit exception e wird nix geworfen. Geöffnet ist die Datei natürlich auch nicht, darauf bin ich schon gekommen 😛 bei Linux wäre es egal hab aber Windoof drauf.
 
Wenn ich die File-Objekte .delete() logge bekomm ich in beiden Fällen ein false zurück. Spiel es eine Rolle das die Methode von einem Actionlistener aufgerufen wird ? Sprich bei Buttonklick?
 
Geöffnet ist die Datei natürlich auch nicht, darauf bin ich schon gekommen 😛 bei Linux wäre es egal hab aber Windoof drauf.

hast du das mit lockhunter oder unlocker überprüft? es kann sich ein process aufgehängt haben, den du auf den ersten blick überhaupt nicht siehst

edit:
Spiel es eine Rolle das die Methode von einem Actionlistener aufgerufen wird ? Sprich bei Buttonklick?
nein
 
wurde die Datei in Windows angelegt ??
Kann es sein das die Datei so aussieht tes.txt.txt ??

Dies passiert wenn man die Endung nich anzeigen lässt .
 
Hier das Actionevent
Java:
private AbstractAction getAbstractAction2() {
		if(abstractAction2 == null) {
			abstractAction2 = new AbstractAction("Löschen", null) {
				public void actionPerformed(ActionEvent evt) {
					
					delete();
				}
			};
		}
		
		return abstractAction2;
	}
 
also bis jetzt habe ich nur eine Methode deleteGroup() gesehen, d.h. mit dem event kann man so alleine nicht viel anfangen
 
Kannst du die Dateien manuell löschen?
Funktioniert es, wenn du nur das löschen im Code hast, also so:
Java:
public static void main(String... args)
{
    File file = new File("pfad");
    System.out.println(file.delete());
}
 
ja so kommen wir aber nicht weiter.

File#exists() liefer true > die Datei existiert bzw. dein Pfad ist gültig
du kannst im gleichen Verzeichnis eine Datei erstellen > Berechtigung OK (bei Windows)
du könntest die Datei manuell löschen oder umbennen > die Datei ist nicht gelockt

Also mehr fällt mir eigentlich fast nicht ein... Überprüf das am besten nochmal (vorallem 3.)
 

Neue Themen


Zurück
Oben