Java + Linux: рабочий каталог — моя домашняя папка

У многих людей возникает проблема, заключающаяся в том, что когда они запускают JAR-приложение из nautilus, CWD (текущий рабочий каталог) устанавливается в их домашнюю папку (а не в папку, в которой находится JAR). Это ошибка в Nautilus, не особенно в Linux.

Если вы знаете трюк, облегчающий правильный запуск Jar вместо того, чтобы открывать терминал и вручную набирать там java -jar myJar.jar, опубликуйте его ниже.

Спасибо


Краткий пример кода проблемы:

File f = new File("ASimpleTextFile.txt");
System.out.println(f.getAbsolutePath());

В Windows это печатает: [The Path To The Jar]/ASimpleTextFile.txt
Но в Linux это печатает: /home/[yourName]/ASimpleTextFile.txt

Это очень плохая идея, потому что мы часто используем относительные пути к файлам конфигурации. Таким образом, они не будут найдены, потому что файл указывает на домашнюю папку.


person Martijn Courteaux    schedule 11.11.2010    source источник
comment
Каким образом ваша программа на Java использует текущий каталог? Вы даже не можете сделать chdir на Java, поэтому идея состоит в том, что ваша программа должна быть независима от cwd.   -  person Chris Jester-Young    schedule 11.11.2010
comment
@Chris: Совсем не так; Я часто использую текущий каталог для записи данных, требуя, чтобы пользователь настроил приложение так, чтобы текущий каталог находился там, где они хотят записывать данные.   -  person Lawrence Dol    schedule 11.11.2010
comment
@Software Monkey: это разумный подход, когда ваше приложение является приложением командной строки. Но для приложения пользовательского интерфейса не должно быть никакой зависимости от текущего каталога (за исключением, возможно, расположения по умолчанию диалогов открытия файлов или подобных вещей).   -  person Joachim Sauer    schedule 11.11.2010


Ответы (1)


По сути, нет никаких гарантий относительно текущего рабочего каталога.

Однако вы МОЖЕТЕ спросить JVM об URL-адресе, где он нашел байтовый код для данного класса (который, как вы знаете, где находится), и использовать его для поиска других ресурсов «рядом» с ним.

См. Определение местоположения класса Java, загруженного Matlab.

person Thorbjørn Ravn Andersen    schedule 11.11.2010
comment
Ооо, stackoverflow теперь показывает заголовки вопросов stackoverflow при связывании. Хороший! - person Thorbjørn Ravn Andersen; 12.11.2010