Как да получите път към ресурс/файл от Java JAR файл

Опитвам се да получа пътя до файл, който се намира извън java jar, и не искам да използвам абсолютен път. Пример: да кажем, че бурканът се намира в ~/lib/myjar.jar и файлът се намира в същата папка. Това, което опитвам е нещо подобно, но не успява:

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

Забележка: моят пакет е com.contro.gui, затова имам "../../../", за да имам достъп до "root"

Не съм сигурен как мога да получа достъп до файла. Някакво предложение?? И какво да кажем, ако файлът, до който искам да имам достъп, е в друга папка като ~/res/ ???


person testk    schedule 14.10.2010    source източник
comment
Има три варианта на решение в зависимост от ситуацията: stackoverflow.com/a/56327069/715269   -  person Gangnus    schedule 27.05.2019


Отговори (2)


Ако файлът е в същата директория като буркана, мисля, че това ще работи (чувства се доста хакерско, но...):

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

(Не съм тествал това, но изглежда осъществимо. Разбира се, ще работи само с буркани, базирани на файлове).

Ако файлът е на произволно място, мисля, че ще трябва или да подадете параметри, или да проверите „известни“ местоположения като user.home. (Или винаги можете да поставите файла в буркана с използване getResource().)

person Ash    schedule 14.10.2010
comment
Перфектно!! Работи според очакванията! Много благодаря! Чупех си главата, опитвайки милиони варианти. Само една модификация...вместо myfile.getParent(), това е myfile.getParentFile() - person testk; 14.10.2010
comment
Една странична бележка: изглежда, че това, което публикувах, работи, ако имате правилната пътека към класа. Но твоето решение е по-добро. Благодаря! - person testk; 14.10.2010
comment
Получавам изключението: java.lang.IllegalArgumentException: URI не е йерархичен - person AnirbanDebnath; 14.12.2019

Не просто направете

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

това ще ви даде родителската директория на вашия клас във файл или буркан, просто не забравяйте да зададете директорията, ако е в буркан като този "NameOfJar\NameOfFolder\etc"

person CoderCub    schedule 20.09.2017