2011-09-19 34 views
18

Estoy tratando de crear un archivo en el sistema de archivos, pero seguir recibiendo esta excepción:No se puede hacer java.io.IOException archivo: No existe el fichero o directorio

java.io.IOException: No such file or directory 

tengo un directorio existente, y yo Estoy tratando de escribir un archivo en ese directorio.

// I have also tried this below, but get same error 
// new File(System.getProperty("user.home") + "/.foo/bar/" + fileName); 

File f = new File(System.getProperty("user.home") + "/.foo/bar/", fileName); 

if (f.exists() && !f.canWrite()) 
     throw new IOException("Kan ikke skrive til filsystemet " + f.getAbsolutePath()); 

if (!f.isFile()) { 
    f.createNewFile(); // Exception here 
} else { 
    f.setLastModified(System.currentTimeMillis()); 
} 

Conseguir excepción:

java.io.IOException: No such file or directory 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(File.java:883)` 

que tiene permiso de escritura en el camino, sin embargo, el archivo no se crea.

+0

¿Puede usted por favor agregue a esta línea después de la primera línea, y nos muestran la salida: System.out.println (f); –

+0

¿Y está seguro de que los directorios '.foo/bar' en realidad existen? – trojanfoe

+1

¿cuál es el punto en ** /. Foo/bar **? – denolk

Respuesta

16

Imprimir el nombre de archivo completo hacia fuera o paso a través de un depurador. Cuando me confunden errores como este, significa que mis suposiciones y expectativas no coinciden con la realidad. Asegúrese de que puede ver cuál es la ruta; te ayudará a descubrir dónde te has equivocado.

+1

Maldición, tenías razón. Tuve un error ortográfico en mi nombre de ruta –

+0

No puedo imaginar por qué se votó este voto 5.5 años después del hecho cuando fue aceptado por el OP y reconocido como la solución correcta en un comentario. Se siente vengativo. Fácil de hacer cuando es anónimo. – duffymo

+0

Es fácil, sí, pero quien cancela los votos también pierde reputación, por lo que no es "libre" de voto negativo. –

33

Si el directorio ../.foo/bar/ no existe, no puede crear un archivo allí, así que asegúrese de crear primero el directorio.

intentar algo como esto:

File f = new File("somedirname1/somedirname2/somefilename"); 
if (!f.getParentFile().exists()) 
    f.getParentFile().mkdirs(); 
if (!f.exists()) 
    f.createNewFile(); 
+0

El directorio exsist –

+0

@Shervin, luego la depuración es el siguiente paso que ** debe ** emprender. :-) –

+1

buenísimo, me ayudó – emvidi

2

intento con

f.mkdirs() continuación createNewFile()

+0

El directorio no existe –

+2

Puede intentar ['File.separator'] (http://download.oracle.com/javase/6/docs/api/java/io/File.html#separator) en lugar de '/' –

1

File.isFile() es false si el archivo/directorio no existe, por lo que no se puede utilizar para probar si usted está tratando de crear un directorio. Pero ese no es el primer problema aquí.

El problema es que los directorios intermedios no existen. Primero quiere llamar al f.mkdirs().

2

Es posible que desee utilizar Apache Commons IO 's método FileUtils.openOutputStream(File). Tiene buenos mensajes de excepción cuando algo salió mal y también crea directorios principales necesarios. Si todo estaba bien, obtendrás directamente OutputStream, muy limpio.

Si solo quiere touch el archivo, entonces use FileUtils.touch(File) en su lugar.

7

Tenga cuidado con los permisos, es probable que no tenga algunos de ellos. Puedes verlo en la configuración -> aplicaciones -> nombre de la aplicación -> permisos -> activa si no es así.

Permissions app

0

que tiene el mismo problema cuando se usan resto fácil. Después de buscar mientras calculaba que este error se produjo cuando no hay lugar para , guarde los archivos temporales. Entonces en tomcat puedes simplemente crear la carpeta tomcat-root/temp.

0

me fijo mi problema con este código en el sistema de archivos de Linux

if (!file.exists()) 
    Files.createFile(file.toPath()); 
Cuestiones relacionadas