por favor revise su selección de la respuesta correcta. La solución propuesta por JigarJoshi es engañosa. No aborda el problema correctamente (ver mi comentario). La solución (simple) propuesta por Bozho es mucho mejor.
mwhs
mkdirEs idempotente en Java. La implementación verificará si el directorio existe para usted y solo lo creará si no existe.
mwhs
Respuestas:
461
Después de ~ 7 años, lo actualizaré para mejorar el enfoque sugerido por Bozho.
newFile("/path/directory").mkdirs();
Obsoleto:
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: Esa es realmente una técnica realmente mala para crear un directorio. El acceso al FS no está reservado a un recurso dedicado. Entre if(!theDir.exists())y theDir.mkdir()el estado podría haber cambiado, así como también podría cambiar entre no crear el directorio (debido a la existsdevolución true) y necesitarlo. El resultado del método existsnunca debe usarse para decidir si crear un directorio o no. Simplemente llame mkdir, no se lanzará ninguna excepción si ya existe.
mwhs
44
@mwhs Entiendo que es mejor no verificar el directorio, pero no entiendo su justificación (segunda parte). ¿No puede cambiar el estado entre llamar mkdiry necesitar el directorio también? Supongo que quiso decir que algún otro proceso elimina el directorio.
Episodex
2
@Episodex Los directorios son recursos compartidos. Simplemente no use la solución anterior, está mal por diferentes razones. No está claro cómo la OP pudo haber pensado que esta es la respuesta correcta. Si desea afirmaciones sobre los recursos de E / S, debe usar bloqueos, no booleanos.
mwhs
44
@mhws Sé que esta publicación tiene un par de meses, pero si miras la mkdirsimplementación, desde el código fuente, lo primero que se llama es if (exists()) { return false; }. La implementación en sí misma verifica primero para ver si el directorio ya existe, por lo que la única razón por la que esta respuesta tiene la culpa, tal vez, es verificar esa condición 2x. No es tan malo como pretendes que sea.
Michael Hogenson
55
A partir de Java 7, probablemente debería usar los métodos Filescomo en la respuesta más reciente de Benoit Blanchon. (Esta respuesta parece haber sido escrita antes de Java 7.)
Brick
504
newFile("/path/directory").mkdirs();
Aquí "directorio" es el nombre del directorio que desea crear / existir.
Respuesta mucho mejor que la seleccionada como la correcta por el OP. Comprobar la existencia del directorio antes de crearlo debería convertirse en un antipatrón bien conocido.
mwhs
77
¿Qué pasa si el directorio ya existe? Haría sobrescribir? o saltear el proceso.
@Tascalator no está claro en la documentación, ¿puede elaborarlo? También la respuesta debe complementarse con la respuesta a la what if the directory is already exists? It would do overwriting? or skip the process.pregunta.
mrgloom
3
está claro:Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
Creo que esta opción no existía en el momento de las preguntas y respuestas originales, pero creo que esta debería ser la respuesta en el futuro.
Brick
66
También sería bueno tener en cuenta que:Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
Keith OYS
Gracias por señalar la diferencia por cierto createDirectory y createDirectories. Me parece una mala elección de nombres.
seinecle
(2019) utilicé Files.createDirectory (Paths.get (directory.toString ())); donde directorio es un objeto de archivo. No te olvides de atrapar tu IOException
chrips
@chrips Es mejor hacerlo directory.toPath()entonces.
Crea un directorio creando primero todos los directorios principales no existentes. A diferencia del método createDirectory, no se genera una excepción si el directorio no se pudo crear porque ya existe. El parámetro attrs es un atributo de archivo opcional para establecer atómicamente al crear los directorios inexistentes. Cada atributo de archivo se identifica por su nombre. Si se incluye más de un atributo del mismo nombre en la matriz, se ignorarán todos menos el último caso.
Si este método falla, puede hacerlo después de crear algunos, pero no todos, los directorios principales.
Como se menciona en el comentario de @mwhs sobre la respuesta de Jigar Joshi, verificar la existencia primero no solo no es necesario sino que es una mala idea.
Bdoserror
4
Aunque esta pregunta ha sido respondida. Me gustaría poner algo extra, es decir, si existe un archivo con el nombre del directorio que está intentando crear, entonces debería generar un error. Para futuros visitantes.
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");}}}
Como se menciona en el comentario de @mwhs sobre la respuesta de Jigar Joshi, verificar la existencia primero no solo no es necesario sino que es una mala idea.
Bdoserror
4
Limpio y ordenado:
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!");}}}}
Solo quería señalar a todos los que llaman File.mkdir()o File.mkdirs()tener cuidado de que el Fileobjeto sea un directorio y no un archivo. Por ejemplo, si solicita mkdirs()la ruta /dir1/dir2/file.txt, creará una carpeta con el nombre file.txtque probablemente no sea el que deseaba. Si está creando un nuevo archivo y también desea crear automáticamente carpetas principales, puede hacer algo como esto:
Así funciona para mí hacer un solo directorio o más o ellos: necesita importar java.io.File;
/ * ingrese el código a continuación para agregar un directorio dietético dir1 o verifique si existe dir1, si no es así, así que créelo y diríjalo con dir2 y 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");}
Como se menciona en el comentario de @mwhs sobre la respuesta de Jigar Joshi, verificar la existencia primero no solo no es necesario sino que es una mala idea.
Bdoserror
0
si quieres estar seguro de que está creado, entonces esto:
porque mkDir()devuelve un booleano, y findbugs lo llorará si no usa la variable. Además no es agradable ...
mkDir()devuelve solo verdadero si lo mkDir()crea. Si el directorio existe, devuelve falso, por lo que para verificar el directorio que creó, solo llame exists()si mkDir()devuelve falso.
assertThat()verificará el resultado y fallará si exists()devuelve falso. ofc puede usar otras cosas para manejar el directorio no creado.
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();}}}
Como se menciona en el comentario de @mwhs sobre la respuesta de Jigar Joshi, verificar la existencia primero no solo no es necesario sino que es una mala idea.
Bdoserror
-7
También puede consultar la función makdir () para crear un nuevo directorio en una carpeta donde desee.
mkdir
Es idempotente en Java. La implementación verificará si el directorio existe para usted y solo lo creará si no existe.Respuestas:
Después de ~ 7 años, lo actualizaré para mejorar el enfoque sugerido por Bozho.
Obsoleto:
fuente
if(!theDir.exists())
ytheDir.mkdir()
el estado podría haber cambiado, así como también podría cambiar entre no crear el directorio (debido a laexists
devolucióntrue
) y necesitarlo. El resultado del métodoexists
nunca debe usarse para decidir si crear un directorio o no. Simplemente llamemkdir
, no se lanzará ninguna excepción si ya existe.mkdir
y necesitar el directorio también? Supongo que quiso decir que algún otro proceso elimina el directorio.mkdirs
implementación, desde el código fuente, lo primero que se llama esif (exists()) { return false; }
. La implementación en sí misma verifica primero para ver si el directorio ya existe, por lo que la única razón por la que esta respuesta tiene la culpa, tal vez, es verificar esa condición 2x. No es tan malo como pretendes que sea.Files
como en la respuesta más reciente de Benoit Blanchon. (Esta respuesta parece haber sido escrita antes de Java 7.)Aquí "directorio" es el nombre del directorio que desea crear / existir.
fuente
what if the directory is already exists? It would do overwriting? or skip the process.
pregunta.Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
Con Java 7, puedes usar
Files.createDirectories()
.Por ejemplo:
fuente
Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
directory.toPath()
entonces.Puedes probar FileUtils # forceMkdir
Esta biblioteca tiene muchas funciones útiles.
fuente
mkdir vs mkdirs
Si desea crear un solo directorio, use
mkdir
Si desea crear una jerarquía de estructura de carpetas, use
mkdirs
fuente
Crea un solo directorio.
Cree un directorio llamado "Directorio2 y todos sus subdirectorios" Sub2 "y" Sub-Sub2 "juntos.
Fuente: este tutorial perfecto , también encontrarás un ejemplo de uso.
fuente
Para java 7 y superior:
Parece innecesario verificar la existencia del directorio o archivo antes de crear, desde createDirectories javadocs :
fuente
El siguiente método debe hacer lo que desee, solo asegúrese de verificar el valor de retorno de mkdir () / mkdirs ()
fuente
Aunque esta pregunta ha sido respondida. Me gustaría poner algo extra, es decir, si existe un archivo con el nombre del directorio que está intentando crear, entonces debería generar un error. Para futuros visitantes.
fuente
Limpio y ordenado:
fuente
Bueno, para crear un directorio / carpeta en Java tenemos dos métodos
Aquí el método makedirectory crea un directorio único si no existe.
Y
Aquí el método makedirectories creará todos los directorios que faltan en la ruta que representa el objeto de archivo.
Por ejemplo, consulte el enlace a continuación (explicado muy bien). ¡¡Espero eso ayude!! https://www.flowerbrackets.com/create-directory-java-program/
fuente
Solo quería señalar a todos los que llaman
File.mkdir()
oFile.mkdirs()
tener cuidado de que elFile
objeto sea un directorio y no un archivo. Por ejemplo, si solicitamkdirs()
la ruta/dir1/dir2/file.txt
, creará una carpeta con el nombrefile.txt
que probablemente no sea el que deseaba. Si está creando un nuevo archivo y también desea crear automáticamente carpetas principales, puede hacer algo como esto:fuente
Así funciona para mí hacer un solo directorio o más o ellos: necesita importar java.io.File;
/ * ingrese el código a continuación para agregar un directorio dietético dir1 o verifique si existe dir1, si no es así, así que créelo y diríjalo con dir2 y dir3 * /
fuente
Esta función le permite crear un directorio en el directorio de inicio del usuario.
fuente
si quieres estar seguro de que está creado, entonces esto:
porque
mkDir()
devuelve un booleano, y findbugs lo llorará si no usa la variable. Además no es agradable ...mkDir()
devuelve solo verdadero si lomkDir()
crea. Si el directorio existe, devuelve falso, por lo que para verificar el directorio que creó, solo llameexists()
simkDir()
devuelve falso.assertThat()
verificará el resultado y fallará siexists()
devuelve falso. ofc puede usar otras cosas para manejar el directorio no creado.fuente
fuente
También puede consultar la función makdir () para crear un nuevo directorio en una carpeta donde desee.
fuente
makdir
. Si quisiste decirmkdir
, ¿cómo agrega esto algo a las respuestas existentes?