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

art*_*ros 27 java file

我需要在〜/ .config/myapp.cfg中创建一个配置文件所以我这样做File:

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

问题是,它告诉我,该目录不存在,就像这样.

java.io.IOException: Not such file or directory
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
Run Code Online (Sandbox Code Playgroud)

我尝试将路径更改为/ home/user之类的东西,并且它有效.所以我设法得出一个结论,java在foldername之前不知道什么是〜/ means和什么是punct(.),因为/home/user/.config也不起作用.

我该怎么办?

aio*_*obe 60

~符号是一个shell的事情.阅读shell扩展.

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

String home = System.getProperty("user.home");
File f = new File(home + "/.config/gfgd.gfgdf");
Run Code Online (Sandbox Code Playgroud)

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


fvu*_*fvu 9

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

f = new File(new File (System.getProperty("user.home"),".config"),"gfgd.gfgdf");
Run Code Online (Sandbox Code Playgroud)

  • 无论操作系统如何,Java都接受`/`作为文件分隔符,所以不用担心使用`.config/gfgd.gfgdf`. (3认同)