В Java звонки
System.getProperty("user.dir")
и
new java.io.File(".").getAbsolutePath();
возвращает текущий рабочий каталог.
Звонок на
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
возвращает путь к файлу JAR, содержащему текущий класс, или элемент (путь) CLASSPATH, который дал текущий класс, если вы работаете непосредственно из файловой системы.
Пример:
Ваше приложение находится по адресу
C:\MyJar.jar
Откройте оболочку (cmd.exe) и cd
в подкаталог C: \ test \.
Запустите приложение с помощью команды java -jar C:\MyJar.jar
.
Первые два вызова return 'C: \ test \ subdirectory'; третий вызов возвращает 'C: \ MyJar.jar'.
При запуске из файловой системы, а не из файла JAR, результатом будет путь к корню сгенерированных файлов классов, например
c:\eclipse\workspaces\YourProject\bin\
Путь не включает каталоги пакетов для сгенерированных файлов классов.
Полный пример получения каталога приложения без имени файла .jar или соответствующего пути к файлам классов, если он запускается непосредственно из файловой системы (например, при отладке):
String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
if (applicationDir.endsWith(".jar"))
{
applicationDir = new File(applicationDir).getParent();
}
// else we already have the correct answer