2012-07-19 11 views
5

ja dostaję ten błąd przy próbie otwarcia pliku:java.io.FileNotFoundException na istniejącym pliku

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) 

Plik jest istniejący w katalogu, ale ja wciąż otrzymuję ten błąd. Jednak po skopiowaniu tego samego pliku w folderze src Projekt obszaru roboczego Eclipse, nie jest zwracany taki wyjątek (chociaż ta metoda tworzy również plik World_X.fr w folderze bin).

Co ja właściwie próbuje zrobić to uzyskać bezwzględną lokalizację pliku .jar przez to:

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

A potem ja dołączanie „World_X.fr” do napisu fileLocation ale to nie działa . Proszę, pomóż mi w tym zakresie.

+4

Czy naprawdę masz ścieżki z „% 20” w nich? –

+0

@DanielDiPaolo tak jakoś! Śpię...... :) – Rafay

Odpowiedz

8

Musisz unescape the %20 na spacje. np .:

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

Spróbuj pominąć% 20 i zamiast tego użyj normalnych spacji. Używasz także odwrotnych ukośników w kodzie, jeśli używasz odwrotnych ukośników, upewnij się, że najpierw uciekniesz przed nimi.

15

Preferowanym sposobem konwersji file: URL do rzeczywistej File to:

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

ta zajmuje wszystkich kontroli i cytowanie/ucieczkę.

Zamiast tego pozostawi Ci te dziwne bity.

6

Oto rozwiązanie, że będzie to działać tylko po JDK1.5,

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