Je souhaite créer et supprimer un répertoire à l'aide de Java, mais cela ne fonctionne pas.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
java
file-io
delete-directory
Monsieur G
la source
la source
Réponses:
Java ne peut pas supprimer les dossiers contenant des données. Vous devez supprimer tous les fichiers avant de supprimer le dossier.
Utilisez quelque chose comme:
Ensuite, vous devriez pouvoir supprimer le dossier en utilisant
index.delete()
Non testé!la source
FileUtils.deleteDirectory
comme @Francesco Menzani l'a dit.if (!index.delete()) {...}
. Ensuite, si l'index est un lien symbolique, il est supprimé indépendamment du fait qu'il semble avoir un contenu.entries
est nul.Juste une seule ligne.
Documentation ici
la source
Cela fonctionne, et même s'il semble inefficace de sauter le test de répertoire, ce n'est pas le cas: le test se déroule tout de suite dans
listFiles()
.Mettre à jour, pour éviter les liens symboliques suivants:
la source
Je préfère cette solution sur java 8:
Depuis ce site: http://www.baeldung.com/java-delete-directory
la source
Files.walk()
, ce qui est explicitement indiqué dans la documentation de l'API. Je sais que si vous ne fermez pas le flux renvoyé par,Files.list()
par exemple, vous pouvez manquer de poignées et le programme plantera. Voir par exemple stackoverflow.com/q/36990053/421049 et stackoverflow.com/q/26997240/421049 .Dans JDK 7, vous pouvez utiliser
Files.walkFileTree()
etFiles.deleteIfExists()
supprimer une arborescence de fichiers. (Exemple: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )Dans JDK 6, une manière possible est d'utiliser FileUtils.deleteQuietly d'Apache Commons qui supprimera un fichier, un répertoire ou un répertoire avec des fichiers et des sous-répertoires.
la source
En utilisant Apache Commons-IO, il suit une ligne:
C'est (légèrement) plus performant que
FileUtils.deleteDirectory
.la source
Comme mentionné, Java ne peut pas supprimer un dossier contenant des fichiers, supprimez donc d'abord les fichiers, puis le dossier.
Voici un exemple simple pour faire ceci:
Ou:
la source
Ma version récursive de base, fonctionnant avec les anciennes versions de JDK:
la source
listFiles()
renvoie null, plutôt que d'appelerisDirectory()
.C'est la meilleure solution pour
Java 7+
:la source
Guava 21+ à la rescousse. À utiliser uniquement s'il n'y a aucun lien symbolique pointant vers le répertoire à supprimer.
(Cette question est bien indexée par Google, donc d'autres personnes utilisant Guava pourraient être heureuses de trouver cette réponse, même si elle est redondante avec d'autres réponses ailleurs.)
la source
J'aime le plus cette solution. Il n'utilise pas de bibliothèque tierce, mais utilise NIO2 de Java 7.
la source
Un autre choix consiste à utiliser la
org.springframework.util.FileSystemUtils
méthode pertinente de Spring qui supprimera récursivement tout le contenu du répertoire.Cela fera l'affaire!
la source
Dans ce
vous appelez
après
Cela signifie que vous créez à nouveau le fichier après la suppression de File.delete () renvoie une valeur booléenne.Donc si vous voulez vérifier, faites
System.out.println(index.delete());
si vous obteneztrue
cela signifie que le fichier est suppriméà partir des commentaires ci-dessous, la réponse mise à jour est comme ceci
la source
Si vous avez des sous-dossiers, vous trouverez des problèmes avec les réponses Cemron. vous devez donc créer une méthode qui fonctionne comme ceci:
la source
Vous pouvez utiliser FileUtils.deleteDirectory . JAVA ne peut pas supprimer les dossiers non vides avec File.delete () .
la source
Directry ne peut pas simplement supprimer s'il contient les fichiers, vous devrez peut-être supprimer les fichiers à l'intérieur d'abord, puis le répertoire
la source
Vous pouvez effectuer un appel récursif si des sous-répertoires existent
la source
nous pouvons utiliser la
spring-core
dépendance;la source
La plupart des réponses (même récentes) faisant référence aux classes JDK s'appuient sur,
File.delete()
mais il s'agit d'une API défectueuse car l'opération peut échouer silencieusement.La
java.io.File.delete()
documentation de la méthode indique:En remplacement, vous devriez privilégier
Files.delete(Path p)
qui jette unIOException
avec un message d'erreur.Le code réel pourrait être écrit tel que:
la source
vous pouvez essayer comme suit
S'il y a des sous-dossiers dans votre dossier, vous devrez peut-être les supprimer de manière récursive.
la source
la source
Fonctionne comme un charme. Pour les dossiers et les fichiers. Salam :)
la source
Retirez-le d'une autre partie
la source
Certaines de ces réponses semblent inutilement longues:
Fonctionne aussi pour les sous-répertoires.
la source
Vous pouvez utiliser cette fonction
la source