java dir.exists_Java:设置“ user.dir”时File.exists()不一致

Windows XP上的JRE 6。

实例化具有不同构造函数的两个File对象会导致File.exists()方法中的结果不一致。

免责声明: 下面的代码是抽象的,而不是实际的代码。

我根本不相信这是File.separator的问题。我首先要求早日做出反应,以防万一我错过了一个众所周知的问题。现在看来,重置user.dir系统属性是导致此问题的原因之一。现在,下面的代码可以复制和使用。您可以复制/粘贴Java类并进行尝试,它的行为应与我列出的结果一致。

建立:

创建文件夹架构C:\toto\tmp\sub。

从不包含tmp/sub子文件夹体系结构的任何文件夹中启动以下类。

码:

public class TestFileExists {

public static void main(String[] args) {

System.setProperty("user.dir", "C:\\toto\\");

File root = new File("tmp");

File sub_a = new File(root, "sub");

File sub_b = new File(root.getAbsolutePath()+"/sub");

System.out.println("sub_a path ? "+sub_a.getAbsolutePath());

System.out.println("sub_a exists ? "+sub_a.exists());

System.out.println("sub_b path ? "+sub_b.getAbsolutePath());

System.out.println("sub_b exists ? "+sub_b.exists());

System.out.println("Path equals ? "+ (sub_a.getAbsolutePath().equals(sub_b.getAbsolutePath())));

System.out.println("Obj equals ? "+ (sub_a.equals(sub_b)));

}

}

结果:

sub_a path ? C:\toto\tmp\sub

sub_a exists ? false

sub_b path ? C:\toto\tmp\sub

sub_b exists ? true

Path equals ? true

Obj equals ? false

我不明白这行sub_a exists ? false, 结果在机器之间也不一致,也与根初始路径 ant不一致,结果现在在机器之间不一致。

现在,如果您通过从包含tmp/sub子文件夹体系结构的文件夹中的命令行调用java重新执行该类(例如,如果从D:\,具有调用D:\tmp\sub),您将得到预期的结果:

sub_a path ? C:\toto\tmp\sub

sub_a exists ? true

sub_b path ? C:\toto\tmp\sub

sub_b exists ? true

Path equals ? true

Obj equals ? false

但是存在的存在sub_a显然是错误肯定的,因为它会检查除所描述的文件夹以外的其他文件夹的存在getAbsolutePath()。

因此,我强烈怀疑这File.exists()取决于实际的Java执行路径,并且该文件存在与绝对路径不一致,并且exists()使用除“

user.dir”系统属性之外的其他路径来检查文件系统。

知道这个问题可能来自哪里吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值