Подтвердить что ты не робот

Доступ к "~" (пользовательскому дому) из Java в Linux

Мне нужно создать файл конфигурации в ~/.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 не знает, что означает ~/, и что означает punct (.) Перед именем папки, потому что /home/user/.config тоже не работает.

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

4b9b3361

Ответ 1

Обозначение ~ - это оболочка. Прочитайте расширение оболочки.

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

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

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

Ответ 2

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

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

Ответ 3

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

System.getProperty("user.home");

Пример:

File f = new File(System.getProperty("user.home") + "/.config/gfgd.gfgdf");
if (!f.exists()) {
    f.createNewFile();
}