2012-02-03 22 views
6

Sto tentando di aprire file con FileInputStream che hanno spazi bianchi nei loro nomi.File di lettura Java con spazi bianchi nel suo percorso

Ad esempio:

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

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

Il risultato è che una FileNotFoundException viene gettata. Ho provato ad eseguire l'hardcode del filePath su "/home/myUserName/folder/This\\ is\\ my\\ file.txt" solo per vedere se dovevo sfuggire ai caratteri di spaziatura e non sembrava funzionare. Qualche suggerimento su questo argomento?

MODIFICA: Giusto per essere sulla stessa pagina con tutti coloro che visualizzano questa domanda ... l'apertura di un file senza spazi bianchi nel suo nome funziona, uno che ha spazi vuoti non riesce. Le autorizzazioni non sono il problema qui né il separatore di cartelle.

+0

possibile duplicato di http://stackoverflow.com/questions/5358850/accessing-files-with-spaces-in-filename-from-java –

risposta

3

nome del file con lo spazio funziona bene

Ecco il mio codice

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() rendimenti true sempre senza alcun problema

+0

grazie per avermi mostrato che prima devo usare File (percorso) prima di inviarlo a FileInputStream. – user253530

+0

@ user253530: stai insinuando che il tuo codice originale non ha funzionato, e il wrapping 'filePath' in un' File() 'ha funzionato ?! – NPE

+1

sì ... se uso FileInputStream (String filePath) non funziona .... ma se prima faccio File f = nuovo File (filePath) e poi FileInputStream (f) non genera un errore ... molto strano .. – user253530

0

No, non è necessario sfuggire agli spazi bianchi.

Se il codice genera FileNotFoundException, il file non esiste (o, forse, mancano le autorizzazioni necessarie per accedervi).

Se le autorizzazioni sono corrette e si pensa che il file esista, assicurarsi che sia chiamato ciò che si pensa venga chiamato. In particolare, assicurarsi che il nome del file non contenga caratteri non stampabili, spazi vuoti iniziali o finali ecc. Per questo, ls -b potrebbe essere utile.

+0

file senza spazi nel loro percorso sono ok, posso aprirli ... quindi i permessi non sembrano essere il problema :(. – user253530

+1

@ user253530: Mostraci l'output da 'ls -l' che elenca il file in questione. – 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 CASE 1A. txt tutti hanno i permessi di lettura ... questo non è il problema ... posso aprire add.txt ma non posso aprire CASE 1A.txt ... è il nome sono sicuro di quello – user253530

1

Sembra che si sia verificato un problema con il separatore di file rispetto agli spazi bianchi nei nomi dei file. Hai provato a utilizzare

System.getProperty("file.separator") 

invece del tuo '/' nella variabile percorso?

+0

leggi le ultime modifiche – user253530

+0

non sfuggire agli spazi bianchi, credo che tu sia su unix/linux come env. Se non funziona, stai facendo qualcos'altro, ad es. mispelling del nome del file o di altro numero – Kris

-1

Normalmente gli spazi bianchi in percorso should't importa. Basta fare in modo quando si sta passando percorso dalla fonte esterna (come la riga di comando), che non contiene gli spazi bianchi alla fine:

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

Nel caso in cui si desidera avere percorso senza spazi, è possibile convertirlo a URI e poi di nuovo al percorso

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