92 votes

la suppression de dossier à partir de java

je veux supprimer tout le contenu qui sont présents dans un dossier qui contient des fichiers et de dossiers. J'ai écrit un code java pour supprimer tous les fichiers, mais je ne suis pas en mesure de supprimer les dossiers. ci-dessous c'est le code que j'utilise..

public void startDeleting(String path) {
        List<String> filesList = new ArrayList<String>();
        List<String> folderList = new ArrayList<String>();
        fetchCompleteList(filesList, folderList, path);
        for(String filePath : filesList) {
            File tempFile = new File(filePath);
            tempFile.delete();
        }
        for(String filePath : folderList) {
            File tempFile = new File(filePath);
            tempFile.delete();
        }
    }

private void fetchCompleteList(List<String> filesList, List<String> folderList, String path) {
    File file = new File(path);
    File[] listOfFile = file.listFiles();
    for(File tempFile : listOfFile) {
        if(tempFile.isDirectory()) {
            folderList.add(tempFile.getAbsolutePath());
            fetchCompleteList(filesList, folderList, tempFile.getAbsolutePath());
        } else {
            filesList.add(tempFile.getAbsolutePath());
        }

    }

}

S'il vous plaît aidez-moi si je suis absent quelque chose dans le code??..

140voto

Sean Patrick Floyd Points 109428

Si vous utilisez Apache Commons IO c'est un one-liner:

FileUtils.deleteDirectory(dir);

Voir FileUtils.deleteDirectory()


Aussi avec la Goyave:

Files.deleteRecursively(dir);

Cela a été retiré de la Goyave il y a plusieurs versions.

84voto

oyo Points 769

J'ai quelque chose comme ceci :

public static boolean deleteDirectory(File directory) {
    if(directory.exists()){
        File[] files = directory.listFiles();
        if(null!=files){
            for(int i=0; i<files.length; i++) {
                if(files[i].isDirectory()) {
                    deleteDirectory(files[i]);
                }
                else {
                    files[i].delete();
                }
            }
        }
    }
    return(directory.delete());
}

7voto

Sidharth Panwar Points 2550

Essayez ceci:

public static boolean deleteDir(File dir) 
{ 
  if (dir.isDirectory()) 
{ 
  String[] children = dir.list(); 
  for (int i=0; i<children.length; i++)
  { 
    boolean success = deleteDir(new File(dir, children[i])); 
    if (!success) 
    {  
      return false; 
    } 
  } 
  // The directory is now empty so delete it 
  return dir.delete(); 
} 

6voto

Thilo Points 108673

Il pourrait être un problème avec les dossiers imbriqués. Votre code supprime les dossiers dans l'ordre où ils ont été trouvés, qui est de haut en bas, qui ne fonctionne pas. Il pourrait fonctionner si vous inversez le dossier de la liste de la première.

Mais je recommande que vous venez d'utiliser une bibliothèque comme Commons IO pour cela.

6voto

Zon Points 518

J'ai trouvé ce bout de code plus understadable et de travail:

public static boolean deleteDir(File dir) {
    if (dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }

    return dir.delete(); // The directory is empty now and can be deleted.
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X