2012-07-12 19 views
9

Ho utilizzato una parte specifica di codice per eliminare i file da una cartella ma si sta rivelando molto problematico perché forse ho dimenticato di chiudere un InputStream o due. Il codice che ho è così grande che non riesco a vedere tutti gli Inputstream che non ho chiuso. C'è un modo per cancellare file se c'è un InputStream aperto o no?Forza Elimina tutti i file da una cartella

Questo è il pezzo di codice che ho utilizzato;

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(); 
     } 
    }   

Ho modificato il codice. Questa versione funziona.

+1

Suggerirei che la risposta breve è no. Dovresti prenderti cura di te di meglio. – MadProgrammer

+0

Quindi dovrei dire che ho attraversato Every Inpustream. C'è nel codice e ho chiuso tutti quanti, ma ho ancora lo stesso errore – ErrorNotFoundException

+0

2 pensieri. Alcuni, alcuni dove è in possesso di un file aperto e/o c'è un problema di autorizzazioni – MadProgrammer

risposta

15

Non ci sono istanze di InputStream nel blocco di codice fornito.

Per non scrivere un sacco di codice IO non verificato, si prega di dare un'occhiata al progetto apache.commons.io. Soprattutto nella classe FileDeleteStrategy, per le operazioni di cancellazione dei file.

Il codice potrebbe essere simile a quanto segue:

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

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

Eccezione nel thread "main" java.io.IOException: impossibile eliminare il file: C: \ ABC Statements final \ Statement0.RPT \t in org .apache.commons.io.FileUtils.forceDelete (FileUtils.java:1390) \t a org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete (FileDeleteStrategy.java:151) \t a org.apache.commons.io .FileDeleteStrategy.delete (FileDeleteStrategy.java:94) \t in abcbankestatement.ABCBankEStatement.main (ABCBankEStatement.java: 502) Java Risultato: 1 – ErrorNotFoundException

+0

se si sostituisce il metodo 'delete' con' deleteQuietly'. In questo caso ** se un file non può essere cancellato, non verrà lanciata alcuna eccezione **. –

+3

Non sono le eccezioni di cui voglio liberarmi, ho bisogno dei file cancellati. – ErrorNotFoundException

3

È possibile utilizzare:

FileUtils.deleteDirectory(File directory) 

da Apache Commons

+3

Probabilmente è meglio usare 'cleanDirectory()' poiché dice che non cancella la directory. Tuttavia, non sono sicuro al 100% di cosa significa "pulito". I * assume * significa che cancella il contenuto della directory, ma la documentazione è * terribile *, quindi non posso esserne certo. – Timmmm

1

con Apache Commons IO:

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

Non è necessario verificare eccezioni in questo modo.

0

Usa:

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

Documenti:

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

Per utilizzarlo è necessario una dipendenza:

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

Si prega di aggiungere qualche documentazione/spiegazione. –

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; 
} 
Problemi correlati