Acceder a " ~ " (inicio del usuario) desde Java en Linux


Necesito crear un archivo de configuración en ~/.config / myapp.cfg Así que estoy haciendo esto con File:

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

El problema es, que me dice, ese directorio no existe y algo así.

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

Intenté cambiar la ruta a algo como /home/user y funcionó. Así que me las arreglé para hacer una conclusión, que java no sabe lo que ~/ significa y lo que un punct(.) antes de foldername significa también, porque / home / user/.la configuración no funciona bien.

¿Qué debo hacer?

 24
Author: aioobe, 2011-09-18

3 answers

La notación ~ es una cosa de shell. Lea sobre la expansión del shell .

Java no entiende esta notación. Para obtener el directorio home, obtenga la propiedad del sistema con la clave user.home:

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

(Como bono, también funcionará en máquinas windows; -)

 52
Author: aioobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-18 18:48:02

Usuario la propiedad del sistema user.home. Para evitar completamente las dependencias del sistema operativo, debe dejar que File haga la resolución de la ruta, de esta manera:

f = new File(new File (System.getProperty("user.home"),".config"),"gfgd.gfgdf");
 6
Author: fvu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-18 18:43:25

En lugar de usar directamente el atajo ~, debe usar (también funciona en Windows)

System.getProperty("user.home");

Ejemplo:

File f = new File(System.getProperty("user.home") + "/.config/gfgd.gfgdf");
if (!f.exists()) {
    f.createNewFile();
}
 3
Author: Sandro Munda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-18 18:47:19