在Linux中从Java访问“〜”(用户主页)

我需要在〜/ .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之前不知道什么是〜/表示什么是punct(。),因为/home/user/.config也不起作用。

我该怎么办?

~符号是shell的东西。 阅读shell扩展 。

Java不理解这种表示法。 要获取主目录,请使用关键user.home获取系统属性 :

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

(作为奖励,它也适用于Windows机器;-)

用户user.home系统属性。 要完全避免操作系统依赖性,您应该让File执行路径解析,如下所示:

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

而不是直接使用~快捷方式,你应该使用(它也适用于Windows)

 System.getProperty("user.home"); 

示例:

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