У меня есть файл "cost.ini" в корне моего пути к классам. Мой файл JAR называется "cost.jar".
Следующий код:
- Если у нас есть файл JAR, берет каталог, в котором находится файл JAR.
- Если у нас есть * .class файлы, берет каталог корня классов.
try {
//JDK11: replace "UTF-8" with UTF_8 and remove try-catch
String rootPath = decode(getSystemResource("cost.ini").getPath()
.replaceAll("(cost\\.jar!/)?cost\\.ini$|^(file\\:)?/", ""), "UTF-8");
showMessageDialog(null, rootPath, "rootpath", WARNING_MESSAGE);
} catch(UnsupportedEncodingException e) {}
Путь, возвращаемый из .getPath()
, имеет формат:
В банке:
file:/C:/folder1/folder2/cost.jar!/cost.ini
В * .классе:
/C:/folder1/folder2/cost.ini
Каждое использование File
приводит к исключению, если приложение предоставляется в формате JAR.