2014-10-31 2 views
7
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
URL url = classLoader.getResource("com/x/y/z.cfg"); 
File file = new File(url.getPath()); 

Это работает при запуске файла jar из Eclipse, но не работает при запуске в файле jar.classLoader.getResource не работает в jar-файле

java.io.FileNotFoundException: Файл: \ C: \ Users \ \ нова Desktop \ Matcher.jar \ с ом \ х \ у \ z.cfg

Это не дубликат. Я проверил все остальные вопросы, никакой полезной информации.

+1

Что вы хотите сделать с этим файлом, как только вы его получите? Вы не можете создать «Файл» из «URL», который вы получаете для ресурса в JAR (потому что это не URL-адрес «file:», обычно это «jar: file: /path/to/file.jar!/com/x/y/z.cfg'), но если API, который вы используете, может принимать 'URL' или' InputStream' вместо 'File', тогда вам не нужно. –

+6

Это объясняется много раз: [здесь] (http://stackoverflow.com/questions/944610/how-do-i-access-a-config-file-inside-the-jar), [здесь] (http: //stackoverflow.com/questions/20389255/java-reading-a-resource-file-from-within-jar), [здесь] (http://stackoverflow.com/questions/403256/how-do-i-read -a-ресурс-файлы из-а-Java-Jar-файл? RQ = 1). Резонанс действительно потому, что File представляет объект файловой системы, а содержимое jar недоступно в файловой системе (но Java может каким-то образом обрабатывать его - как InputStream). –

+0

URL.getFile() * не конвертирует URL в допустимый путь к файлу. Он просто возвращает часть пути URL. (В дни Java 1.0 большинство URL-адресов ссылались на физические файлы, поэтому метод называется getFile.) – VGR

ответ

11

Когда файл вставляется в банку, он становится байтовым потоком вместо обычного объекта File.

Попробуйте

InputStream stram=getClass().getClassLoader().getResourceAsStream(relativePath); 

More Tutorial...

Читать аналогичный пост here и here

1

Вы не можете создать экземпляр файла, потому что единственный файл, который вы должны это JAR. Вот почему getResource() возвращает URL. Вы можете получить поток, используя метод URL.openStream() для чтения содержимого.

Смежные вопросы