2017-07-31 2 views
0

Je souhaite créer un nouveau répertoire. S'il n'existe pas, créez-le. s'il existe - je veux "réinitialiser"/"tronquer" le répertoire. En d'autres termes, Je veux obtenir un répertoire videJava - Créer un répertoire vide

Mes problèmes sont -

  1. Je l'ai lu pour vérifier une existence d'un répertoire pour décider si ou non de créer est une mauvaise pratique, donc je ne peux pas déterminer ce que je devrais faire ensuite. Vous pouvez lire l'explication de pourquoi c'est une mauvaise pratique dans How to create a directory in Java?
  2. Je peux parcourir tous les fichiers et les supprimer, mais je suis à la recherche d'une approche plus élégante.
+1

Re 1: accède-t-on au répertoire simultanément ou non (si vous le faites, je ne pense pas qu'il existe une manière atomique de vider un répertoire)? Re 2., c'est ce qui va se passer sous le capot de toute façon. – assylias

+1

Jetez un oeil à commons-io. Par exemple. http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#cleanDirectory(java.io.File) – msfoster

+1

Une chose est sûre: n'utilisez pas 'File' . Lisez les autres réponses à la question là-bas. Ils ont beaucoup d'informations. – RealSkeptic

Répondre

0

En utilisant un certain modèle java 8 vous avez efficacité dans le nettoyage de répertoire et la création,

File file = new File(path); 
    if(!file.exists()) 
    { 

     file.mkdir(); 
    } 
    else 
    {    
     Files.walk(Paths.get("C:/test/ABC/")) 
     .filter(Files::isRegularFile) 
     .map(Path::toFile) 
     .forEach(File::delete); 
    } 
1

Il est vrai que c'est une mauvaise pratique. Comme mkdir ne parvient pas à créer le répertoire si le même nom de répertoire existe. Il n'est donc pas nécessaire de vérifier si un répertoire du même nom existe ou non. C'est pourquoi il est mauvais de vérifier avant d'appeler mkdir.

La manière simple que vous pouvez faire est de vérifier d'abord si le répertoire existe ou pas. si oui, supprimer et appelez mkdir

Vous pouvez regarder dans le JDK Bug report. Les membres de la communauté l'ont mentionné comme un bug.

+0

@paz reingold Si la réponse est bien, merci d'accepter la réponse et de voter. –