ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("com/x/y/z.cfg");
File file = new File(url.getPath());
Działa to podczas uruchamiania pliku JAR z Eclipse, ale nie działa podczas działania w pliku JAR.classLoader.getResource nie działa w pliku JAR
java.io.FileNotFoundException: Plik: \ c: \ Użytkownicy \ \ nova pulpitu \ Matcher.jar \ c om \ x \ r \ z.cfg
nie jest duplikat. Sprawdziłem wszystkie pozostałe pytania, brak użytecznych informacji.
Co chcesz zrobić z tym "plikiem", gdy już go masz? Nie możesz utworzyć "pliku" z "adresu URL", który dostajesz dla zasobu w pliku JAR (ponieważ nie jest to adres URL 'file:', zwykle jest to 'jar: file: /path /to/file.jar!/com/x/y/z.cfg'), ale jeśli API, którego używasz, może zaakceptować 'URL' lub' InputStream' zamiast 'File', to nie musisz tego robić. –
Zostało to wyjaśnione wiele razy: [tutaj] (http://stackoverflow.com/questions/944610/how-do-i-access-a-config-file-inside-the-jar), [tutaj] (http: //stackoverflow.com/questions/20389255/java-reading-a-resource-file-from-within-jar), [tutaj] (http://stackoverflow.com/questions/403256/how-do-i-read -a-resource-file-from-a-java-jar-file? rq = 1). Rezon jest tak naprawdę, ponieważ File reprezentuje obiekt systemu plików, a zawartość słoika nie jest dostępna dla systemu plików (ale Java może nim w pewien sposób poradzić - jako InputStream). –
URL.getFile() * nie * konwertuje adresu URL na poprawną ścieżkę pliku. Zwraca jedynie ścieżkę adresu URL. (W czasach Java 1.0 większość adresów URL odwoływała się do plików fizycznych, dlatego metoda nazywa się getFile.) – VGR