2010-05-14 19 views
172

Quiero escribir un nuevo archivo con el FileWriter. Yo lo uso como esto:Crear ruta completa automáticamente al escribir en un nuevo archivo

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

Ahora dir1 y dir2 Actualmente no existen. Quiero que Java los cree automáticamente si aún no están allí. En realidad, Java debería configurar toda la ruta del archivo si aún no existe.

¿Cómo puedo lograrlo?

Respuesta

306

Algo así como:

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

¿Por qué getParentFile y no solo mkdirs? – sauperl

+22

@sauperl: Porque eso crearía un * directorio * llamado 'filename.txt' ... –

15
+1

+1: citar los documentos – ted

+1

que crearán un _directory_ 'C: \\ usuario \ Desktop \ dir1 \ directorio2 \ nombre de archivo. txt \ '. –

+0

@ MartinSchröder: solo si conserva el componente de nombre de archivo. –

22

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

Uso FileUtils para manejar todos estos dolores de cabeza.

Editar: Por ejemplo, use el código siguiente para escribir en un archivo, este método 'comprobará y creará el directorio padre si no existe'.

openOutputStream(File file [, boolean append]) 
+1

Por favor, ¿podría ser más específico? – Jean

+0

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

+0

Acepto que FileUtils es una buena forma de hacerlo, pero creo que una forma más sencilla de hacerlo es utilizando writeStringToFile, no openOutputStream. P.ej. File file = new File ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (archivo, "foo bar baz", verdadero); – paul

92

Desde Java 1.7 se puede utilizar Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt"); 
Files.createDirectories(pathToFile.getParent()); 
Files.createFile(pathToFile); 
+2

Importante tener en cuenta que las rutas relativas pueden causar nulo excepción de puntero. 'Path pathToFile = Paths.get (" myFile.txt "); Files.createDirectories (pathToFile.getParent()); ' – Mag

Cuestiones relacionadas