2010-06-22 7 views

Respuesta

102

¿Has probado esto?

file.getParentFile().mkdirs(); 
file.createNewFile(); 

No sé de una sola llamada al métodoque va a hacer esto, pero es bastante fácil como dos declaraciones.

+0

Esto sólo funciona si el archivo fue creado con una cadena de ruta que contiene un padre directorio, es decir, 'nuevo archivo (" archivo.txt "). getParentFile()' devuelve 'nulo',' nuevo archivo ("dir/archivo.txt"). getParentFile() 'devuelve lo mismo que' nuevo archivo ("dir ")' –

+0

Es cierto que no necesita 'mkdirs' si el archivo que intenta crear no está en un directorio inexistente, pero mi caso de uso es que estoy creando varios archivos, algunos de los cuales tienen directorios principales. mientras que otros no. –

7

La respuesta de Jon funciona si está seguro de que la cadena de ruta de acceso con la que está creando un archivo incluye directorios principales, es decir, si está seguro de que la ruta tiene el formato <parent-dir>/<file-name>.

Si no es así, es decir, es una ruta relativa del formulario <file-name>, entonces getParentFile() devolverá null.

E.g.

File f = new File("dir/text.txt"); 
f.getParentFile().mkdirs();  // works fine because the path includes a parent directory. 

File f = new File("text.txt"); 
f.getParentFile().mkdirs();  // throws NullPointerException because the parent file is unknown, i.e. `null`. 

Así que si su ruta de archivo puede o no puede incluir directorios padre, que son más seguros con el siguiente código:

File f = new File(filename); 
if (f.getParentFile() != null) { 
    f.getParentFile().mkdirs(); 
} 
f.createNewFile(); 
+0

por muchas razones siempre debe incluir una ruta. ¿De qué otro modo debería saber el sistema dónde quiere colocar ese archivo? – NikkyD

+0

@NikkyD Lo siento, no entiendo muy bien tu comentario. En mi respuesta, no estoy diciendo que no incluya una ruta, pero que la ruta aprobada puede no incluir _parent directories_. También hay un ejemplo de tal camino en la respuesta. –

Cuestiones relacionadas