2010-10-14 4 views
2

Я пытаюсь получить путь к файлу, который находится из java-банку, и я не хочу использовать абсолютный путь , Экзамен: скажем, что jar находится в ~/lib/myjar.jar, и файл находится в той же папке. То, что я пытаюсь что-то вроде этого, но он не:Как получить путь к ресурсу/файлу из Java JAR-файла

File myfile = new File(this.getClass().getResource("../../../").toURI()); 

Примечание: мой пакет com.contro.gui, поэтому у меня есть «../../../», для того, для доступа к «корню»

Я не уверен, как я могу получить доступ к файлу. Любое предложение?? И что, если файл, который я хочу получить, находится в другой папке, например, ~/res/???

ответ

4

Если файл находится в том же каталоге, что и банку, я думаю, что это будет работать (чувствует себя довольно Hacky, но ...):

URL url = getClass().getProtectionDomain().getCodeSource().getLocation(); 
File myfile = new File(url.toURI()); 
File dir = myfile.getParentFile(); // strip off .jar file 

(Не проверял, но это представляется целесообразным Будет работать только с файловыми баночками, конечно).

Если файл находится в некотором случайном месте, я думаю, вам нужно будет либо пройти параметры, либо проверить «известные» местоположения, например user.home. (Или, вы всегда можете поместить файл в банке использования getResource().)

+0

Perfect !! Он работал так, как ожидалось! Спасибо огромное! Я ломал голову, пробуя миллионы вариантов. Только одна модификация ... вместо «myfile.getParent()», это «myfile.getParentFile()» – testk

+0

Одностороннее примечание: похоже, что я опубликовал, он работает, если у вас есть правильный путь к классам. Но ваше решение это лучше. Благодаря! – testk

+0

@testk: проблем нет. (Обновлено для исправления кода) – Ash

0

Нет вобще

 File FileName = new File("."); 
    String Directory = FileName.getCanonicalPath(); 

, что поможет вам родительский каталог вашего класса в файл или банке только не забудьте установить каталог, если он находится в банке, подобной этой «NameOfJar \ NameOfFolder \ etc»

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