ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("com/x/y/z.cfg");
File file = new File(url.getPath());
Questo funziona quando si esegue il file jar da Eclipse ma non funziona quando si esegue in un file jar.classLoader.getResource non funziona nel file jar
java.io.FileNotFoundException: file: \ C: \ Users \ nova \ Desktop \ Matcher.jar \ c om \ x \ y \ z.cfg
Questo non è un duplicato Ho controllato tutte le altre domande, nessuna informazione utile.
Cosa vuoi fare con quel 'File' una volta che ce l'hai? Non puoi creare un 'File' dall'URL' che ottieni per una risorsa in un JAR (perché non è un file':: URL, tipicamente 'jar: file: /path/to/file.jar!/it/x/y/z.cfg'), ma se l'API che stai utilizzando può accettare un 'URL' o un' InputStream' invece di un 'File', non è necessario. –
Questo è spiegato più volte: [qui] (http://stackoverflow.com/questions/944610/how-do-i-access-a-config-file-inside-the-jar), [qui] (http: //stackoverflow.com/questions/20389255/java-reading-a-resource-file-from-within-jar), [qui] (http://stackoverflow.com/questions/403256/how-do-i-read -a-resource-file-da-un-java-jar-lima? RQ = 1). Il reson è proprio perché File rappresenta un oggetto file system e il contenuto di jar non è accessibile dal file system (ma Java può gestirlo in qualche modo - come InputStream). –
URL.getFile() * non * converte un URL in un percorso file valido. Restituisce semplicemente la porzione di percorso dell'URL. (Nei giorni di Java 1.0, la maggior parte degli URL si riferiva a file fisici, ecco perché il metodo si chiama getFile.) – VGR