Доступ к "~" (домашний каталог пользователя) из Java в Linux - PullRequest
27 голосов
/ 18 сентября 2011

Мне нужно создать файл конфигурации в ~ / .config / myapp.cfg, поэтому я делаю это с File:

File f;
f = new File("~/.config/gfgd.gfgdf");
if(!f.exists()){
    f.createNewFile();
}

Проблема в том, что мне говорят, что этот каталог не существует и что-то в этом роде.

java.io.IOException: Not such file or directory
    at java.io.UnixFileSystem.createFileExclusively(Native Method)

Я попытался изменить путь на что-то вроде / home / user, и это сработало. Поэтому мне удалось сделать вывод, что java не знает, что означает ~ / и что означает пункт (.) Перед foldername, потому что /home/user/.config не работает так же хорошо.

Что мне делать?

Ответы [ 3 ]

59 голосов
/ 18 сентября 2011

Запись ~ - это оболочка. Читайте о расширение оболочки .

Java не понимает эту запись. Чтобы получить доступ к домашнему каталогу, получите системное свойство с ключом user.home:

String home = System.getProperty("user.home");
File f = new File(home + "/.config/gfgd.gfgdf");

(В качестве бонуса он будет работать и на машинах с Windows; -)

8 голосов
/ 18 сентября 2011

Пользователь user.home Системное свойство.Чтобы полностью избежать зависимостей операционной системы, вы должны позволить File делать разрешение пути следующим образом:

f = new File(new File (System.getProperty("user.home"),".config"),"gfgd.gfgdf");
4 голосов
/ 18 сентября 2011

Вместо прямого использования ярлыка ~ следует использовать (он также работает в Windows)

System.getProperty("user.home");

Пример:

File f = new File(System.getProperty("user.home") + "/.config/gfgd.gfgdf");
if (!f.exists()) {
    f.createNewFile();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...