gpt4 book ai didi

java - 为什么 Java 文件仅以规范形式存在?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:17 25 4
gpt4 key购买 nike

我遇到了 JVM 的一个奇怪行为。我想更改用户目录,即查找文件的目录,它通常对应于运行 java 命令的路径。

所以我写了下面的代码:

System.setProperty("user.dir", "/tmp/");
File f = new File("myfile");
System.out.println(f.exists());
System.out.println(f.getCanonicalFile().exists());

文件 /tmp/myfile 存在并且可由 JVM 读取,但是如果我/tmp/ 中,当我运行该代码,结果是:

falsetrue

它们是同一个文件,Java 能够检索到它的正确规范形式,但是相关的不存在,而规范的存在。

这是一个错误吗?有没有办法可靠地更改 JVM 用户目录?

更改代码不是一种选择,因为我正在尝试运行外部库。

最佳答案

这种行为是正常的,原因是,两者是有区别的

File f = new File("myfile");

File cf = new File("myfile").getCanonicalFile();

第一个表示相对于您当前工作目录的文件路径,它可能是您的项目路径。使用相对路径,user.dir属性未被使用,即使在设置 user.dir 时也是如此作为 JVM 参数 -Duser.dir=/tmp/ . Java 文件句柄到 native 文件实体的解析由底层 Fileystem 实现 native 完成。

但是在调用 getCanoncialFile() 时在解析 native 文件句柄之前,使用用户路径信息解析相对路径 - 在您的情况下 user.dir = /tmp/ .

显然,没有文件 myfile<WORKING_DIR>但在 /tmp/ .

行为与 f.getAbsoluteFile() 相同.

关于java - 为什么 Java 文件仅以规范形式存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37917899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com