2012-02-03 159 views
6

Estoy tratando de abrir archivos con FileInputStream que tienen espacios en blanco en sus nombres.Archivo de lectura Java con espacios en blanco en su ruta

Por ejemplo:

String fileName = "This is my file.txt"; 
String path = "/home/myUsername/folder/"; 

String filePath = path + filename; 
f = new BufferedInputStream(new FileInputStream(filePath)); 

El resultado es que un FileNotFoundException está siendo lanzada. Intenté codificar el filePath en "/home/myUserName/folder/This\\ is\\ my\\ file.txt" solo para ver si debía escapar de los espacios en blanco y no parecía funcionar. ¿Alguna sugerencia sobre este asunto?

EDITAR: Solo para estar en la misma página con todos los que ven esta pregunta ... abrir un archivo sin espacio en blanco en su nombre funciona, uno que tiene espacios en blanco falla. Los permisos no son el problema aquí ni el separador de la carpeta.

+0

posible duplicado de http://stackoverflow.com/questions/5358850/accessing-files-with-spaces-in-filename-from-java –

Respuesta

3

Nombre de archivo con el espacio funciona bien

Aquí está mi código

File f = new File("/Windows/F/Programming/Projects/NetBeans/TestApplications/database prop.properties"); 
     System.out.println(f.exists()); 
     try 
     { 
      FileInputStream stream = new FileInputStream(f); 
     } 
     catch (FileNotFoundException ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 

f.exists() vuelve true siempre sin ningún problema

+0

gracias por mostrarme que primero tengo que usar File (path) antes de enviarlo a FileInputStream. – user253530

+0

@ user253530: ¿Estás insinuando que tu código original no funcionó, y envolviendo 'filePath' en' File() 'lo hizo funcionar ?! – NPE

+1

sí ... si uso FileInputStream (String filePath) no funciona ... pero si primero hago File f = new File (filePath) y luego FileInputStream (f) no arroja un error ... muy raro .. – user253530

0

No, no necesita escapar de espacios en blanco.

Si el código arroja FileNotFoundException, entonces el archivo no existe (o, quizás, carezca de los permisos necesarios para acceder a él).

Si los permisos son correctos, y cree que el archivo existe, asegúrese de que se llame como usted cree que se llama. En particular, asegúrese de que el nombre del archivo no contenga caracteres no imprimibles, espacios en blanco iniciales o finales inadvertidos, etc. Para esto, puede ser útil ls -b.

+0

archivos sin espacios en su camino están bien, puedo abrirlos ... así que los permisos no parecen ser el problema :(. – user253530

+1

@ user253530: Muéstranos el resultado de 'ls -l' que enumera el archivo en cuestión. – NPE

+0

-rw-r - r-- 1 root root 101 2012-02-03 11:16 add.txt -rw-r - r-- 1 root root 13969 2012-02-02 20:23 CASO 1A. txt todos han leído permisos ... este no es el problema ... puedo abrir add.txt pero no puedo abrir CASE 1A.txt ... es el nombre estoy seguro de que – user253530

1

Parece que tiene un problema más bien con el separador de archivos que el espacio en blanco en sus nombres de archivo. ¿Ha intentado usar

System.getProperty("file.separator") 

en lugar de su '/' en la variable de ruta?

+0

lea las últimas ediciones – user253530

+0

no escapa de su espacio en blanco, creo que está en env de unix/linux. Si no funciona, estás haciendo algo incorrecto, por ejemplo. mal escribiendo el nombre del archivo o smth else – Kris

-1

Normalmente los espacios en blanco en la ruta DEBERÍAMOS importa. Sólo asegúrese de que cuando estás pasando trayectoria de una fuente externa (como la línea de comandos), que no contiene espacios en blanco al final:

File file = new File(path.trim()); 

En caso de que quiera tener ruta sin espacios, se puede convertir a URI y luego de vuelta a la ruta

try { 
    URI u = new URI(path.trim().replaceAll("\\u0020", "%20")); 
    File file = new File(u.getPath()); 
} catch (URISyntaxException ex) { 
    Exceptions.printStackTrace(ex); 
} 
Cuestiones relacionadas