Différence entre mkdir () et mkdirs () en java pour java.io.File [fermé]


123

Quelqu'un peut-il me dire la différence entre ces deux méthodes:

  • file.mkdir()
  • file.mkdirs()

23
Lire le javadoc: mkdir vs mkdirs
assylias

2
La nouvelle façon de le faire consiste à utiliser les méthodes statiques Files.createDirectories et Files.createDirectory: docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
neves

Vous pouvez obtenir "Fichier non pris en charge" après avoir utilisé mkdir.
user7856586

Y a-t-il des différences de performances entre les deux? Surtout quand les répertoires parents existent déjà?
Joshua Pinter

Réponses:


158

mkdirs()crée également des répertoires parents dans le chemin que cela Filereprésente.

javadocs pour mkdirs():

Crée le répertoire nommé par ce chemin abstrait, y compris tous les répertoires parents nécessaires mais inexistants. Notez que si cette opération échoue, elle peut avoir réussi à créer certains des répertoires parents nécessaires.

javadocs pour mkdir():

Crée le répertoire nommé par ce chemin abstrait.

Exemple:

File  f = new File("non_existing_dir/someDir");
System.out.println(f.mkdir());
System.out.println(f.mkdirs());

cédera falsepour le premier [et aucun répertoire ne sera créé], et truepour le second, et vous aurez créénon_existing_dir/someDir


7
Parce qu'Oracle rompt à nouveau les liens sur Internet: mkdirs () et mkdir ()
MyPasswordIsLasercats

@MyPasswordIsLasercats Merci de m'avoir fait savoir. fixé.
amit le

1
Si le répertoire existe déjà, mkdir()renvoie true- falset-il ou ? Le javadoc ne semble pas couvrir cet aspect.
Arun

@Arun, selon le Javadoc, il renvoie "vrai si et seulement si le répertoire a été créé", ce qui, je suppose, est ambigu quant à savoir s'il a été créé par cet appel ou avant. Cette réponse suggère la première.
Samuel Edwin Ward

mkdir et mkdirs retournent tous les deux false dans mon cas -.-. Cela fonctionne si j'utilise une double barre oblique inverse "\\" MAIS: si je fais ".toURI ()" après cela, je reçois: file: / Users / MyName / Desktop /% 5Cnon_existing_dir% 5CsomeDir / et si je le fais ".getPath () "Je reçois" \ non_existing_dir \ someDir "et si je fais" .getCanonicalPath () "je reçois / Users / MyName / Desktop / \ non_existing_dir \ someDir
Aerox

62

mkdirs()créera le chemin du répertoire spécifié dans son intégralité où mkdir()ne créera que le répertoire le plus bas, échouant s'il ne trouve pas le répertoire parent du répertoire qu'il tente de créer.

En d'autres termes, mkdir()c'est comme mkdiret mkdirs()c'est comme mkdir -p.

Par exemple, imaginons que nous ayons un /tmprépertoire vide . Le code suivant

new File("/tmp/one/two/three").mkdirs();

créerait les répertoires suivants:

  • /tmp/one
  • /tmp/one/two
  • /tmp/one/two/three

Où ce code:

new File("/tmp/one/two/three").mkdir();

ne créerait aucun répertoire - car il ne trouverait pas /tmp/one/two- et reviendrait false.


4
mkdir()

ne crée qu'un seul répertoire à la fois, s'il s'agit d'un seul parent. autrement, il peut créer le sous-répertoire (si le chemin spécifié existe uniquement) et ne pas créer de répertoires entre deux répertoires. il ne peut donc pas créer plusieurs répertoires dans un même répertoire

mkdirs()

créer les répertoires multiples (entre deux répertoires également) à la fois.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.