2012-07-12 23 views
9

Ich habe ein bestimmtes Stück Code verwendet, um Dateien aus einem Ordner zu löschen, aber es erweist sich als sehr problematisch, weil ich vielleicht vergessen habe, ein oder zwei InputStream zu schließen. Der Code, den ich habe, ist so groß, dass ich nicht alle Inputstreams sehen kann, die ich nicht geschlossen habe. Gibt es eine Möglichkeit, Dateien zu löschen, unabhängig davon, ob ein OpenStream geöffnet ist oder nicht?Erzwingen Löschen aller Dateien aus einem Ordner

Dies ist das Stück des Codes, den ich verwendet habe;

File fin = new File("C:/ABC Statements final/"); 
    File[] finlist = fin.listFiles();  
    for (int n = 0; n < finlist.length; n++) { 
     if (finlist[n].isFile()) { 
     System.gc(); 
     Thread.sleep(2000); 
      finlist[n].delete(); 
     } 
    }   

Ich habe den Code bearbeitet. Diese Version funktioniert.

+1

Ich würde vorschlagen, dass die kurze Antwort ist nein. Du solltest besser auf deine Streams aufpassen. – MadProgrammer

+0

Dann sollte ich sagen, dass ich jeden Inpustraum durchgegangen bin. Es gibt im Code und ich habe die ganze Menge von ihnen geschlossen. Aber ich habe immer noch den gleichen Fehler – ErrorNotFoundException

+0

2 Gedanken. Einige, wo eine Datei geöffnet ist und/oder ein Berechtigungsproblem vorliegt – MadProgrammer

Antwort

15

Im angegebenen Codebeispiel sind keine InputStream-Instanzen vorhanden.

Um nicht viel ungeprüften IO-Code zu schreiben, werfen Sie bitte einen Blick auf das Projekt apache.commons.io. Vor allem in der Klasse FileDeleteStrategy für das Löschen von Dateien.

Code könnte so aussehen:

File fin = new File("C:/ABC Statements final/"); 

for (File file : fin.listFiles()) { 
    FileDeleteStrategy.FORCE.delete(file); 
} 
+0

Ausnahme im Thread "main" java.io.IOException: Datei kann nicht gelöscht werden: C: \ ABC Anweisungen final \ Statement0.RPT \t bei org .apache.commons.io.FileUtils.forceDelete (FileUtils.java:1390) \t bei org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete (FileDeleteStrategy.java:151) \t bei org.apache.commons.io .FileDeleteStrategy.delete (FileDeleteStrategy.java:94) \t bei abcbankestatement.ABCBankEStatement.main (ABCBankEStatement.Java: 502) Java Ergebnis: 1 – ErrorNotFoundException

+0

wenn Sie die Methode 'delete' durch' deleteQuietly' ersetzen. In diesem Fall ** wenn eine Datei nicht gelöscht werden konnte, wird keine Ausnahme ausgelöst **. –

+3

Es ist nicht die Ausnahmen, die ich loswerden möchte, ich brauche die Dateien gelöscht. – ErrorNotFoundException

3

Sie verwenden können:

FileUtils.deleteDirectory(File directory) 

von Apache Commons

+3

Wahrscheinlich besser, 'cleanDirectory()' zu verwenden, da es besagt, dass es das Verzeichnis nicht löscht. Ich bin jedoch nicht 100% sicher, was "sauber" bedeutet. Ich nehme an, dass es bedeutet, dass es den Verzeichnisinhalt löscht, aber die Dokumentation ist * schrecklich *, also kann ich nicht sicher sein. – Timmmm

1

Mit Apache Commons IO:

File dir = ... 
FileUtils.deleteQuietly(dir); 
dir.mkdirs(); 

Keine Notwendigkeit, auf diese Weise nach Ausnahmen zu suchen.

0

Verwendung:

import org.apache.commons.io.FileUtils; 
    FileUtils.cleanDirectory(fin); 

Docs:

/** 
    * Clean a directory without deleting it. 
    * 
    * @param directory directory to clean 
    * @throws IOException in case cleaning is unsuccessful 
    */ 

Um es zu benutzen, müssen Sie eine Abhängigkeit:

Maven:

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.6</version> 
</dependency> 

Gradle:

compile 'commons-io:commons-io:2.6' 
0
public void removeDir() 
{ 
try 
{ 
    File dir = new File((System.getProperty("user.dir")+"/ReportFolderToMail"+timeStamp)); 
    if (dir.isDirectory()) 
    { 
     File[] files = dir.listFiles(); 
     if (files != null && files.length > 0) 
     { 
      for (File aFile : files) 
      { 
       System.gc(); 
       Thread.sleep(2000); 
       FileDeleteStrategy.FORCE.delete(aFile); 
       System.out.println("delet file" +aFile); 
      } 
     } 
     dir.delete(); 
     System.out.println("delet" +dir); 
    } 
    else 
    { 
     dir.delete(); 
    } 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
+1

Bitte fügen Sie eine Dokumentation/Erklärung hinzu. –

0
public boolean removeDir() 
{ 
try 
{ 
    //destFile = new File((System.getProperty("user.dir")+"/FileName")) 
    // checks if the directory has any file 
    File dir = destFile; 
    if (dir.isDirectory()) 
    { 
     File[] files = dir.listFiles(); 
     if (files != null && files.length > 0) 
     { 
      for (File aFile : files) 
      { 
       System.gc(); 
       Thread.sleep(2000); 
       FileDeleteStrategy.FORCE.delete(aFile); 
       System.out.println("delet file" +aFile); 
      } 
     } 
     dir.delete(); 
     System.out.println("delet" +dir); 
    } 
    else 
    { 
     dir.delete(); 
    } 
} 
catch(Exception e) 
{ 
    logger.log(LogStatus.FATAL, "Exception Occured While Deleting Folder : " +e); 
} 
return true; 
} 
Verwandte Themen