veuillez revoir votre sélection de la bonne réponse. La solution proposée par JigarJoshi est trompeuse. Il ne résout pas le problème correctement (voir mon commentaire). La solution (simple) proposée par Bozho est bien meilleure.
mwhs
mkdirest idempotent en java. L'implémentation vérifiera si le répertoire existe pour vous et ne le créera que s'il n'existe pas.
mwhs
Réponses:
461
Après environ 7 ans, je le mettrai à jour pour une meilleure approche suggérée par Bozho.
newFile("/path/directory").mkdirs();
Obsolète:
File theDir =newFile("new folder");// if the directory does not exist, create itif(!theDir.exists()){System.out.println("creating directory: "+ theDir.getName());boolean result =false;try{
theDir.mkdir();
result =true;}catch(SecurityException se){//handle it}if(result){System.out.println("DIR created");}}
-1: C'est en fait une très mauvaise technique pour créer un répertoire. L'accès au FS n'est pas réservé à une ressource dédiée. Entre if(!theDir.exists())et theDir.mkdir()l'état pourrait avoir changé, ainsi que changer entre ne pas créer le répertoire (à cause du existsretour true) et en avoir besoin. Le résultat de la méthode existsne doit jamais être utilisé pour décider de créer ou non un répertoire. Appelez simplement mkdir, aucune exception ne sera levée si elle existe déjà.
mwhs
4
@mwhs Je comprends qu'il vaut mieux ne pas chercher le répertoire mais je ne comprends pas votre justification (deuxième partie). Le statut ne peut-il pas également changer entre appeler mkdiret avoir besoin du répertoire? Je suppose que vous vouliez dire qu'un autre processus supprime le répertoire.
Episodex
2
Les répertoires @Episodex sont des ressources partagées. N'utilisez simplement pas la solution ci-dessus, elle est incorrecte pour différentes raisons. On ne sait pas comment le PO aurait pu penser que c'était la bonne réponse. Si vous voulez des assertions sur les ressources d'E / S, vous devez utiliser des verrous, pas des booléens.
mwhs
44
@mhws Je sais que ce message a quelques mois mais si vous regardez l' mkdirsimplémentation, à partir du code source, la toute première chose qui est appelée est if (exists()) { return false; }. L'implémentation elle-même vérifie d'abord si le répertoire existe déjà, donc la seule chose à laquelle cette réponse est en défaut, peut-être, est de vérifier cette condition 2x. Pas aussi mauvais que vous le prétendez.
Michael Hogenson
5
Depuis Java 7, vous devriez probablement utiliser les méthodes Filescomme dans la réponse la plus récente de Benoit Blanchon. (Cette réponse semble avoir été écrite avant Java 7.)
Brick
504
newFile("/path/directory").mkdirs();
Ici "répertoire" est le nom du répertoire que vous souhaitez créer / exister.
Meilleure réponse que celle choisie comme bonne par l'OP. Vérifier l'existence du répertoire avant de le créer devrait devenir un anti-modèle bien connu.
mwhs
7
que faire si le répertoire existe déjà? Cela ferait écraser? ou ignorer le processus.
@Tascalator ce n'est pas clair dans la documentation pouvez-vous élaborer? La réponse doit également être complétée par la réponse à la what if the directory is already exists? It would do overwriting? or skip the process.question.
mrgloom
3
c'est clair:Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
Je pense que cette option n'existait pas au moment de la Q&R originale, mais cela devrait être la réponse à l'avenir, je pense.
Brick
6
Il serait également bon de noter que:Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
Keith OYS
Merci d'avoir souligné la différence entre createDirectory et createDirectories. Je trouve que c'est un mauvais choix de nom.
seinecle
(2019) J'ai utilisé Files.createDirectory (Paths.get (directory.toString ())); où répertoire est un objet File. N'oubliez pas d'attraper votre IOException
chrips le
@chrips Il vaut mieux faire directory.toPath()alors.
Crée un répertoire en créant d'abord tous les répertoires parents inexistants. Contrairement à la méthode createDirectory, aucune exception n'est levée si le répertoire n'a pas pu être créé car il existe déjà. Le paramètre attrs est des attributs de fichier facultatifs à définir de manière atomique lors de la création des répertoires inexistants. Chaque attribut de fichier est identifié par son nom. Si plusieurs attributs du même nom sont inclus dans le tableau, tous, sauf la dernière occurrence, sont ignorés.
Si cette méthode échoue, elle peut le faire après avoir créé certains, mais pas tous, des répertoires parents.
Comme mentionné dans le commentaire de @mwhs sur la réponse de Jigar Joshi, la vérification de l'existence en premier n'est pas seulement nécessaire mais en fait une mauvaise idée.
Bdoserror
4
Bien que cette question ait été répondue. Je voudrais mettre quelque chose en plus, c'est-à-dire s'il existe un fichier avec le nom du répertoire que vous essayez de créer, cela devrait provoquer une erreur. Pour les futurs visiteurs.
publicstaticvoid makeDir(){File directory =newFile(" dirname ");if(directory.exists()&& directory.isFile()){System.out.println("The dir with name could not be"+" created as it is a normal file");}else{try{if(!directory.exists()){
directory.mkdir();}String username =System.getProperty("user.name");String filename =" path/"+ username +".txt";//extension if you need one}catch(IOException e){System.out.println("prompt for error");}}}
Comme mentionné dans le commentaire de @mwhs sur la réponse de Jigar Joshi, la vérification de l'existence en premier n'est pas seulement nécessaire mais en fait une mauvaise idée.
Bdoserror
4
Propre et net:
import java.io.File;publicclassRevCreateDirectory{publicvoid revCreateDirectory(){//To create single directory/folderFile file =newFile("D:\\Directory1");if(!file.exists()){if(file.mkdir()){System.out.println("Directory is created!");}else{System.out.println("Failed to create directory!");}}//To create multiple directories/foldersFile files =newFile("D:\\Directory2\\Sub2\\Sub-Sub2");if(!files.exists()){if(files.mkdirs()){System.out.println("Multiple directories are created!");}else{System.out.println("Failed to create multiple directories!");}}}}
Je voulais juste signaler à tous ceux qui appellent File.mkdir()ou File.mkdirs()faire attention que l' Fileobjet est un répertoire et non un fichier. Par exemple, si vous appelez mkdirs()le chemin /dir1/dir2/file.txt, il créera un dossier avec le nom file.txtqui n'est probablement pas celui que vous vouliez. Si vous créez un nouveau fichier et souhaitez également créer automatiquement des dossiers parents, vous pouvez faire quelque chose comme ceci:
Cela fonctionne pour moi de faire un seul répertoire ou plus ou eux: besoin d'importer java.io.File;
/ * entrez le code ci-dessous pour ajouter un répertoire dir1 ou vérifiez s'il existe dir1, sinon, créez-le ainsi avec dir2 et dir3 * /
File filed =newFile("C:\\dir1");if(!filed.exists()){if(filed.mkdir()){System.out.println("directory is created");}}else{System.out.println("directory exist");}File filel =newFile("C:\\dir1\\dir2");if(!filel.exists()){if(filel.mkdir()){System.out.println("directory is created");}}else{System.out.println("directory exist");}File filet =newFile("C:\\dir1\\dir2\\dir3");if(!filet.exists()){if(filet.mkdir()){System.out.println("directory is created");}}else{System.out.println("directory exist");}
Comme mentionné dans le commentaire de @mwhs sur la réponse de Jigar Joshi, la vérification de l'existence en premier n'est pas seulement nécessaire mais en fait une mauvaise idée.
Bdoserror
0
si vous voulez être sûr qu'il est créé, alors ceci:
beacuse mkDir()retourne un booléen, et findbugs pleurera si vous n'utilisez pas la variable. Aussi ce n'est pas sympa ...
mkDir()renvoie seulement vrai si le mkDir()crée. Si le répertoire existe, il renvoie false, donc pour vérifier le répertoire que vous avez créé, n'appelez que exists()si mkDir()return false.
assertThat()vérifie le résultat et échoue si exists()renvoie faux. ofc vous pouvez utiliser d'autres choses pour gérer le répertoire non créé.
publicclassTest1{publicstaticvoid main(String[] args){String path =System.getProperty("user.home");File dir=newFile(path+"/new folder");if(dir.exists()){System.out.println("A folder with name 'new folder' is already exist in the path "+path);}else{
dir.mkdir();}}}
Comme mentionné dans le commentaire de @mwhs sur la réponse de Jigar Joshi, la vérification de l'existence en premier n'est pas seulement nécessaire mais en fait une mauvaise idée.
Bdoserror
-7
Vous pouvez également faire référence à la fonction makdir () pour créer un nouveau répertoire dans un dossier où vous le souhaitez.
mkdir
est idempotent en java. L'implémentation vérifiera si le répertoire existe pour vous et ne le créera que s'il n'existe pas.Réponses:
Après environ 7 ans, je le mettrai à jour pour une meilleure approche suggérée par Bozho.
Obsolète:
la source
if(!theDir.exists())
ettheDir.mkdir()
l'état pourrait avoir changé, ainsi que changer entre ne pas créer le répertoire (à cause duexists
retourtrue
) et en avoir besoin. Le résultat de la méthodeexists
ne doit jamais être utilisé pour décider de créer ou non un répertoire. Appelez simplementmkdir
, aucune exception ne sera levée si elle existe déjà.mkdir
et avoir besoin du répertoire? Je suppose que vous vouliez dire qu'un autre processus supprime le répertoire.mkdirs
implémentation, à partir du code source, la toute première chose qui est appelée estif (exists()) { return false; }
. L'implémentation elle-même vérifie d'abord si le répertoire existe déjà, donc la seule chose à laquelle cette réponse est en défaut, peut-être, est de vérifier cette condition 2x. Pas aussi mauvais que vous le prétendez.Files
comme dans la réponse la plus récente de Benoit Blanchon. (Cette réponse semble avoir été écrite avant Java 7.)Ici "répertoire" est le nom du répertoire que vous souhaitez créer / exister.
la source
what if the directory is already exists? It would do overwriting? or skip the process.
question.Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
Avec Java 7, vous pouvez utiliser
Files.createDirectories()
.Par exemple:
la source
Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
directory.toPath()
alors.Vous pouvez essayer FileUtils # forceMkdir
Cette bibliothèque possède de nombreuses fonctions utiles.
la source
mkdir vs mkdirs
Si vous souhaitez créer un répertoire unique, utilisez
mkdir
Si vous souhaitez créer une hiérarchie de structure de dossiers, utilisez
mkdirs
la source
Créez un répertoire unique.
Créez un répertoire nommé "Directory2 et tous ses sous-répertoires" Sub2 "et" Sub-Sub2 "ensemble.
Source: ce tutoriel parfait , vous trouverez également un exemple d'utilisation.
la source
Pour java 7 et plus:
Il semble inutile de vérifier l'existence du répertoire ou du fichier avant de créer, à partir de javadocs createDirectories :
la source
La méthode suivante doit faire ce que vous voulez, assurez-vous simplement de vérifier la valeur de retour de mkdir () / mkdirs ()
la source
Bien que cette question ait été répondue. Je voudrais mettre quelque chose en plus, c'est-à-dire s'il existe un fichier avec le nom du répertoire que vous essayez de créer, cela devrait provoquer une erreur. Pour les futurs visiteurs.
la source
Propre et net:
la source
Eh bien pour créer un répertoire / dossier en java, nous avons deux méthodes
Ici, la méthode makedirectory crée un répertoire unique s'il n'existe pas.
Et
Ici, la méthode makedirectories créera tous les répertoires manquants dans le chemin que représente l'objet fichier.
Par exemple, reportez-vous au lien ci-dessous (très bien expliqué). J'espère que cela aide!! https://www.flowerbrackets.com/create-directory-java-program/
la source
Je voulais juste signaler à tous ceux qui appellent
File.mkdir()
ouFile.mkdirs()
faire attention que l'File
objet est un répertoire et non un fichier. Par exemple, si vous appelezmkdirs()
le chemin/dir1/dir2/file.txt
, il créera un dossier avec le nomfile.txt
qui n'est probablement pas celui que vous vouliez. Si vous créez un nouveau fichier et souhaitez également créer automatiquement des dossiers parents, vous pouvez faire quelque chose comme ceci:la source
Cela fonctionne pour moi de faire un seul répertoire ou plus ou eux: besoin d'importer java.io.File;
/ * entrez le code ci-dessous pour ajouter un répertoire dir1 ou vérifiez s'il existe dir1, sinon, créez-le ainsi avec dir2 et dir3 * /
la source
Cette fonction vous permet de créer un répertoire sur le répertoire personnel de l'utilisateur.
la source
si vous voulez être sûr qu'il est créé, alors ceci:
beacuse
mkDir()
retourne un booléen, et findbugs pleurera si vous n'utilisez pas la variable. Aussi ce n'est pas sympa ...mkDir()
renvoie seulement vrai si lemkDir()
crée. Si le répertoire existe, il renvoie false, donc pour vérifier le répertoire que vous avez créé, n'appelez queexists()
simkDir()
return false.assertThat()
vérifie le résultat et échoue siexists()
renvoie faux. ofc vous pouvez utiliser d'autres choses pour gérer le répertoire non créé.la source
la source
Vous pouvez également faire référence à la fonction makdir () pour créer un nouveau répertoire dans un dossier où vous le souhaitez.
la source
makdir
. Si vous vouliez diremkdir
, comment cela ajoute-t-il quelque chose aux réponses existantes?