Доступ к "~" (пользовательскому дому) из 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 тоже не работает.
Что мне делать?
Ответы
Ответ 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();
}