2012-07-19 4 views
5

sto ottenendo questo errore quando provo ad aprire un file:java.io.FileNotFoundException su un file esistente

java.io.FileNotFoundException: D:\Portable%20Programs\Android%20Development\workspace3\XXX-desktop\bin\World_X.fr (The system cannot find the path specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.util.Scanner.<init>(Unknown Source) 

Il file è esistente nella directory ma sto ancora ricevendo questo errore. Tuttavia, quando copio lo stesso file nella cartella src Project dell'area di lavoro Eclipse, non viene restituita alcuna eccezione (anche se questo metodo crea anche il file World_X.fr nella cartella bin).

Quello che sto effettivamente cercando di fare è ottenere la posizione assoluto del file .jar attraverso questo:

fileLocation = new String(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

E poi sto aggiungendo "World_X.fr" alla stringa fileLocation, ma questo non sta funzionando . Per favore aiutami in questo senso.

+4

Hai davvero sentieri con "% 20" in loro? –

+0

@DanielDiPaolo si, in qualche modo! Sto dormendo...... :) – Rafay

risposta

8

È necessario scansionare lo spazio %20. ad esempio:

fileLocation = new String(
    Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()) 
    .replaceAll("%20", " "); 
0

Prova a lasciare fuori% 20 e utilizza invece spazi normali. Inoltre, stai usando i backslash, nel tuo codice se stai usando i backslash assicurati di sfuggirli prima.

15

Il modo migliore per convertire un URL file: in un vero e proprio File è questo:

File file = new File(url.toURI()); 

Questo si prende cura di tutti i controlli e citando/fuga.

L'utilizzo di getPath() invece lascerà questi bit dispari a voi.

6

Ecco la soluzione per questo, questo funzionerà solo dopo jdk1.5,

try { f = new File("somePath".toURI().getPath()); } catch(Exception e) {}