Cree una ruta completa automáticamente al escribir en un nuevo archivo

246

Quiero escribir un nuevo archivo con el FileWriter. Lo uso así:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

Ahora dir1y dir2actualmente no existen. Quiero que Java los cree automáticamente si aún no están allí. En realidad, Java debería configurar la ruta completa del archivo si aún no existe.

¿Cómo puedo conseguir esto?


fuente

Respuestas:

431

Algo como:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
Jon Skeet
fuente
11
¿Por qué getParentFile y no solo mkdirs?
sauperl
¿Anulará la carpeta anterior si vuelvo a emitir el mismo código con un archivo hermano diferente?
surajs1n
1
@ surajs1n: si el directorio ya existe, mkdirsno hará nada.
Jon Skeet
3
@sauperl: si el archivo aún no existe, mkdirs () asumirá que todo lo especificado es un directorio y lo creará como tal (solo lo probé). Al usar getParentFile () , deja la creación del archivo en sí para FileWriter .
h4nek
149

Desde Java 1.7 puede usar Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);
cdmihai
fuente
44
Es importante tener en cuenta que las rutas relativas pueden causar una excepción de puntero nulo. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag
if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Prueba si el directorio ya existe para evitar errores
Andre Nel
29

Uso File.mkdirs():

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);
Armand
fuente
16

Uso File.mkdirs().

Marcelo Cantos
fuente
1
Eso creará un directorio `C: \\ user \ Desktop \ dir1 \ dir2 \ filename.txt`.
Martin Schröder
@ MartinSchröder: solo si mantiene el componente de nombre de archivo.
Marcelo Cantos
4

Use FileUtils para manejar todos estos dolores de cabeza.

Editar: por ejemplo, use el código a continuación para escribir en un archivo, este método 'comprobará y creará el directorio principal si no existe'.

openOutputStream(File file [, boolean append]) 
kakacii
fuente
1
Por favor, ¿podrías ser más específico?
Jean
Hola Jean, Editado. Hay muchos otros métodos útiles en FileUtils. Las clases IO de Apache Commons, como OIUtils y FileUtils, facilitan la vida de los desarrolladores de Java.
kakacii
1
Estoy de acuerdo en que FileUtils es un buen camino a seguir, pero creo que una forma más fácil de hacerlo es usar writeStringToFile, no openOutputStream. Por ejemplo, archivo de archivo = archivo nuevo ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (archivo, "foo bar baz", verdadero);
Paul
Gracias por eso . Hice mi código mucho más limpio ahora. Enlace a javadoc reciente: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu