Comment supprimer un dossier avec des fichiers à l'aide de Java
Je veux créer et supprimer un répertoire à l'aide de Java, mais il ne fonctionne pas.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
- Ce qui s'est passé lorsque vous avez essayé?
- Quelle est la question?
- fichier d'index ne retirez pas.
- vous êtes callinf index.mkdir() de nouveau,donc, si le fichier est supprimé puis il va aussi créer un autre
- C'est probablement parce que vous êtes il re-création après la suppression.
- Je veux créer et supprimer un fichier de manière aussi dynamique.mais ici, le fichier a été créé n'est pas supprimé.
- mr.JqueryLearner ce dossier cotains par fichier, mais que les fichiers ne sont pas supprimés, je veux supprimer ce fichier également.
- Reportez-vous à Comment supprimer un répertoire en Java
- Malheureusement, @AniketThakur, cette approche permettra de suivre les liens symboliques et supprimer des fichiers et des répertoires qui peuvent ne pas avoir été prévu.
- L'Apache IO bibliothèque a la capacité de supprimer des répertoires avec des fichiers. Vérifier commons.apache.org/proper/commons-io/javadocs/api-2.5/org/...
Vous devez vous connecter pour publier un commentaire.
Java n'est pas en mesure de supprimer des dossiers avec des données. Vous devez supprimer tous les fichiers avant de supprimer le dossier.
Utiliser quelque chose comme:
Alors vous devriez être en mesure de supprimer le dossier à l'aide de
index.delete()
Non testé!
FileUtils.deleteDirectory
comme @Francesco Menzani dit.if (!index.delete()) {...}
. Ensuite, si l'indice est un lien symbolique, il est supprimé, indépendamment de savoir si elle a le contenu.entries
est null.Juste un one-liner.
Documentation ici
Cela fonctionne, et bien qu'il semble inefficace pour ignorer le répertoire de test, il n'est pas: le test se passe tout de suite dans
listFiles()
.Mise à jour, pour éviter de suivre les liens symboliques:
Dans le JDK 7 vous pouvez utiliser
Files.walkFileTree()
etFiles.deleteIfExists()
pour supprimer une arborescence de fichiers.Dans le JDK 6 une façon est d'utiliser FileUtils.deleteQuietly de Apache Commons, qui va supprimer un fichier, un répertoire ou un répertoire avec les fichiers et sous-répertoires.
À l'aide d'Apache Commons-IO, c'est la suite de one-liner:
C'est (légèrement) plus performants que
FileUtils.deleteDirectory
.Je préfère cette solution sur java 8:
À partir de ce site: http://www.baeldung.com/java-delete-directory
Files.walk()
, ce qui est explicitement indiqué dans les docs de l'API. Je sais que si vous n'avez pas de fermer le flux de données retourné parFiles.list()
par exemple, vous pouvez exécuter de poignées et le programme va planter. Voir, par exemple, stackoverflow.com/q/36990053/421049 et stackoverflow.com/q/26997240/421049 .Ma base une version récursive, en travaillant avec les anciennes versions de JDK:
listFiles()
renvoie la valeur null, plutôt que d'appelerisDirectory()
.C'est la meilleure solution pour
Java 7+
:J'aime cette solution le plus. Il n'utilise pas de 3ème partie de la bibliothèque, au lieu de cela il utilise NIO2 de Java 7.
Goyave 21+ à la rescousse. À utiliser seulement si il n'existe pas de liens symboliques pointant du répertoire à supprimer.
(Cette question est bien indexé par Google, de sorte que d'autres personnes usig de la Goyave peut-être heureux de trouver cette réponse, même si c'est redondant avec d'autres réponses ailleurs.)
Dans ce
vous appelez
après
Cela signifie que vous sont en train de créer le fichier à nouveau, après la suppression de
Fichier.delete() renvoie une valeur booléenne.Donc, si vous souhaitez vérifier, puis faire
System.out.println(index.delete());
si vous obteneztrue
, alors cela signifie que le fichier est suppriméde la commentaires donné ci-dessous,la mise à jour de la réponse, c'est comme cela
Vous pouvez utiliser FileUtils.deleteDirectory. JAVA ne pouvez pas supprimer la non-vide foldres avec Fichier.delete().
Comme mentionné, Java n'est pas en mesure de supprimer un dossier qui contient des fichiers, donc d'abord supprimer les fichiers et les dossiers.
Voici un exemple simple pour ce faire:
Ou:
directry ne peut pas simplement supprimer si il a les fichiers de sorte que vous pouvez avoir besoin de supprimer les fichiers à l'intérieur d'abord, puis répertoire
Si vous avez des sous-dossiers, vous trouverez des ennuis avec la Cemron réponses. donc, vous devez créer une méthode qui fonctionne comme ceci:
Vous pouvez faire appel récursif si les sous-répertoires existe
nous pouvons utiliser la
spring-core
de la dépendance;La plupart des réponses (même récente) qui référence les classes du JDK compter sur
Fichier.delete()
mais c'est un défaut de l'API que l'opération peut échouer en silence.Le
java.io.File.delete()
documentation de la méthode unis :De remplacement, vous devriez favoriser
Fichiers.supprimer(Chemin p)
qui déclenche uneIOException
avec un message d'erreur.Le code peut être écrit comme :
vous pouvez essayer comme suit
Si il y a des sous-dossiers à l'intérieur de votre dossier vous devrez peut-être supprimer de manière récursive eux.
Fonctionne comme un Charme . Pour les dossier et les fichiers . Salam 🙂
L'enlever d'ailleurs partie
Certaines de ces réponses semblent inutilement long:
Fonctionne également pour les sous répertoires.
Vous pouvez utiliser cette fonction