2012-07-12 29 views
9

He estado usando una pieza específica de código para eliminar archivos de una carpeta pero está demostrando ser muy problemático, porque tal vez se olvidó de cerrar un InputStream o dos. El código que tengo es tan grande que no puedo ver todos los Inputstreams que no he cerrado. ¿Hay alguna manera de eliminar archivos si hay un InputStream abierto o no?Fuerza Borrar todos los archivos de una carpeta

Esta es la parte del código que he estado usando;

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

He editado el código. Esta versión funciona

+1

me gustaría sugerir que la respuesta corta es no. Deberías cuidarte mejor. – MadProgrammer

+0

Entonces debería decir que he pasado por cada Inpustream. Está en el código y he cerrado la totalidad de ellos. Pero sigo teniendo el mismo error – ErrorNotFoundException

+0

2 pensamientos. Alguien, en algún lugar es la celebración de un archivo abierto y/o hay un problema de permisos – MadProgrammer

Respuesta

15

de: No hay casos InputStream en el trozo proporcionado de código.

Para no escribir mucho código IO no probado, por favor, eche un vistazo al proyecto apache.commons.io. Especialmente en la clase FileDeleteStrategy, para operaciones de eliminación de archivos.

Su código podría ser así:

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

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

Excepción en hilo java.io.IOException "principal": No se puede eliminar el archivo: C: \ Declaraciones ABC última \ Statement0.RPT \t en org .apache.commons.io.FileUtils.forceDelete (FileUtils.java:1390) \t en org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete (FileDeleteStrategy.java:151) \t en org.apache.commons.io .FileDeleteStrategy.delete (FileDeleteStrategy.java:94) \t en abcbankestatement.ABCBankEStatement.main (ABCBankEStatement.java: 502) Java Resultado: 1 – ErrorNotFoundException

+0

si reemplaza el método 'delete' con' deleteQuietly' one. En este caso ** si no se puede eliminar un archivo, no se lanzará ninguna excepción **. –

+3

No son las excepciones de las que quiero deshacerme, necesito los archivos eliminados. – ErrorNotFoundException

3

que puede utilizar:

FileUtils.deleteDirectory(File directory) 

de Apache Commons

+3

Probablemente sea mejor usar 'cleanDirectory()' ya que dice que no elimina el directorio. Sin embargo, no estoy 100% seguro de lo que significa "limpio". I * asumo * significa que elimina el contenido del directorio, pero la documentación es * horrible *, por lo que no puedo estar seguro. – Timmmm

1

con Apache Commons IO:

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

No es necesario verificar excepciones de esta manera.

0

Use:

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 
    */ 

Para usarlo necesita una dependencia:

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

Por favor, agrega un poco de documentación/explicación. –

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; 
} 
Cuestiones relacionadas