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

时间:2011-09-18 18:37:22

标签: java file

我需要在〜/ .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也不起作用。

我该怎么办?

3 个答案:

答案 0 :(得分:58)

~符号是shell的东西。阅读shell expansion

Java不理解这种表示法。要获取主目录,请使用密钥user.home获取system property

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

您应该使用(它也适用于Windows)

,而不是直接使用~快捷方式
System.getProperty("user.home");

示例:

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