Löschen von Files nicht möglich

redbomber

Bekanntes Mitglied
Hallo zusammen,
bin hier gerade am verzweifeln. Eigentlich möchte ich etwas ganz einfaches machen und zwar Dateien löschen, aber ich bekomme immer eine Exception bemi löschen.
Selbst wenn ich in Windows die Datei löschen möchte, geht das nicht, da ein Java-Process darauf zugreift.

Jaja, ist mir schon klar, dass ich in meinem Programm irgendwo einen Schreibzugriff oder Lesezugriff nicht geschlossen habe, aber ich habe das schon mehrfach geprüft, den Fehler aber nicht gefunden.

Wie kann ich jetzt herausfinden wo genau der Fehler liegt?
Hier mal der Code der ausgeführt wird:

Java:
lWrapper = lWrappedFiles.get(lPath);
               
               File[] lFiles =null;

               // Kopiere Dateien von Remote System auf lokales System
               try {
                  copyFilesFromRemoteSystem(...); // ab hier sind die Dateein lokal in einem Verzeichnis

               } catch (Exception e1) {
                  logger.error("Fehler beim kopieren der Remote-Dateien");
               }

               // hole nun die lokalen dateien
               lFiles = getLocalFiles().listFiles();


               // arbeite auf diesen Dateien (lesend)
               operationOne(lFiles);

               // arbeite auf diesen Dateien (lesend)
               operationTwo(lFiles);

               // nun lösche alle lokalen Dateien
               deleteFiles(lFiles); // hier kommt es bei manchen Dateien zum Fehler

}

Sodele, wie bekomme ich nun heraus wer hier mein Übeltäter ist.
Ich habe alle Untermethoden geprüft, überall wird das FileInputStream wieder geschlossen:

hier operationOne() (operationTwo() ist nahezu identisch):
Java:
 Properties properties = new Properties();
      if (aFile != null && aFile.exists()) {
         FileInputStream lFileInputStream = null;
         try {
            lFileInputStream = new FileInputStream(aFile);
            properties.load(lFileInputStream);
         } catch (IOException e) {
            logger.error("Failed to read properties from File " + e.getMessage());
         } finally {
            if (lFileInputStream != null) {
               try {
                  lFileInputStream.close();
               } catch (IOException e) {
                  logger.error("Failed to close FileInputStream " + e.getMessage());
               }
            }
         }
         doSomethingWithProperty(properties);
      }

Wenn ich das ganze im Debug-Modus ausführe, bekomme ich den Fehler irgendwie nicht.

Wie komme ich denn hier weiter? Vielleicht könnt ihr mir helfen.

Grüße
 

Mujahiddin

Top Contributor
Wahrscheinlich liegt es daran, eine Directory zu löschen.
Du kannst eine Directory nur löschen, falls diese keine Dateien enthält. Also musst du bei Directories rekursiv die deleteFiles-Methode aufrufen.

Java:
void deleteFiles(File[] files) {
	for (File f : files)
		if( f.isDirectory() ) {
			deleteFiles(f.listFiles());
			f.delete();
		}
		else
			f.delete();
}

ein bisschen erweitert (für fehlgeschlagene Files)

Java:
/**
 * deletes all the specified files and, if this method encounters a directory, their children
 * 
 * @param files
 *            the files to delete
 * @return a list of file that this method has failed to delete.
 */
private static final List<File> deleteFiles(File[] files) {
	List<File> failed = new ArrayList<>();
	for( File f : files )
		if( f.isDirectory() ) {
			deleteFiles( f.listFiles() );
			if( !f.delete() )
				failed.add( f );
		} else if( !f.delete() )
			failed.add( f );
	return failed;
}
 
Zuletzt bearbeitet:

redbomber

Bekanntes Mitglied
Ok, habt ja Recht :)
hier die methode.
Zum Ablauf:
Ich kopiere die Datei erst in ein anderes Verzeichnis (als Sicherung) und dann lösche ich das File aus dem ursprünglichem Verzeichnis. Das löschen schlägt wie gesagt manchmal fehl.

@Mujahiddin
Ich kann das Problem mit Verzeichnissen ausschliessen, also bei mir werden immer nur Dateien im Verzeichnis angelegt, also keine Ordner.

Java:
File targetFolder = ...;
private void deleteFiles(File[] aFiles) {
         if (aFiles == null) {
            return;
         }
    
         // hier möchte ich noch alle files in ein anderes Verzeichnis sichern
         File lCopiedFile = null;
         for (File lFile : aFiles) {
            lCopiedFile = new File(targetFolder , lFile.getName());
            try {
               lCopiedFile.createNewFile();
              
               FileInputStream fis = new FileInputStream(lFile);
               FileOutputStream fos = new FileOutputStream(lCopiedFile);
               numberOfFiles++;
               try {
                  byte[] buf = new byte[1024];
                  int i = 0;
                  while ((i = fis.read(buf)) != -1) {
                     fos.write(buf, 0, i);
                  }
               } catch (Exception e) {
                  throw e;
               } finally {
                  if (fis != null)
                  fis.close();
                  if (fos != null)
                  fos.close();
               }
    
               // hier kommt jetzt das eigentliche löschen
               boolean lDeleted = lFile.delete();
               if (!lDeleted) {
                  logger.error("Fehler beim löschen");
               }
            } catch (Exception e) {
              throw e;
            }
         }
      }
 
Zuletzt bearbeitet:

Mujahiddin

Top Contributor
Du machst das viel zu umständlich...
Die Klasse File hat dafür eine eigene Methode: File#renameTo(File dest) - mit ihr kannst du deine Datei in ein anderes Verzeichnis verschieben.
 

FArt

Top Contributor
Du machst das viel zu umständlich...
Die Klasse File hat dafür eine eigene Methode: File#renameTo(File dest) - mit ihr kannst du deine Datei in ein anderes Verzeichnis verschieben.

Nicht immer... aber immer öfter ;-)
Whether or not this method can move a file from one filesystem to another is platform-dependent. The return value should always be checked to make sure that the rename operation was successful.
 

pro2

Bekanntes Mitglied
Ist zwar schon ein paar Tage älter, aber wenn möglich, würde ich immer zu den Methoden von Java 7 raten, wenn du mit Java 7 programmierst. Meines Wissens nach sind dies alle native Methoden des jeweiligen Betriebssystems und damit wesentlich performanter als die alten. Meine ich zumindest :)
 

Robokopp

Bekanntes Mitglied
Ich stand vor einem ähnlichen Problem und bin dann auf Apache Fileutils gestoßen. Das befindet sich in der commons io Bibliothek und klappt wunderbar. Auch ein force delete ist damit problemlos möglich und in der Anwendung ist es auch einfach
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Quaxli Files massenhaft löschen Allgemeine Java-Themen 3
Daniel_L Best Practice zum Löschen von Log-Files? Allgemeine Java-Themen 8
J Alte Log Files löschen mit log4j Allgemeine Java-Themen 3
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
K Leerzeiilen aus ArrayList löschen?! Allgemeine Java-Themen 7
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
S Singleton Instanz löschen Allgemeine Java-Themen 5
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
S Java komplett löschen und neu installieren Allgemeine Java-Themen 4
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
J Element aus HashSet löschen Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
S Reihen aus einem 2-dim. Array 'löschen' Allgemeine Java-Themen 2
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
S Liste Object Löschen Allgemeine Java-Themen 7
G Log4J - Logs älter als 3 Tage löschen Allgemeine Java-Themen 5
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
D Kann Tiff Datei nicht löschen Allgemeine Java-Themen 12
0x7F800000 Regex zum löschen vom unnötigen whitespace Allgemeine Java-Themen 4
S Problem beim Löschen des Inhalts des Fensters Allgemeine Java-Themen 4
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
O File zum löschen "schließen" Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
C String to hex und hex-Werte löschen Allgemeine Java-Themen 2
H Benutzerkonto löschen Allgemeine Java-Themen 4
G Dateien löschen Allgemeine Java-Themen 3
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
G List- Einträge löschen Allgemeine Java-Themen 3
T probleme mit file löschen Allgemeine Java-Themen 9
F Aus einer XML Datei löschen Allgemeine Java-Themen 3
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
S Löschen von Objekt erzwingen Allgemeine Java-Themen 4
T LDAP - Eintrag löschen Allgemeine Java-Themen 6
C StyledDocument: SimpleAttributeSets löschen? Allgemeine Java-Themen 2
P löschen Allgemeine Java-Themen 5
M JLabels löschen (sollen nicht mehr gezeichnet werden) Allgemeine Java-Themen 10
T Große Dateibestände löschen - Speicherproblem Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben