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?

Respuestas:


431

Algo como:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

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);

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);


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]) 

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.