java: new File("", "name") != new File("name") ? (带有空字符串的文件构造函数)
今天注意到了这一点。
假设 java 进程(Windows)的 PWD 中存在名为“existing”的文件。
new File("existing").exists() => true
new File("", "existing").exists() => false
new File(".", "existing").exists() => true
我预料到,来自 javadoc 系统相关默认目录为“.”而这些都是真的,所以这出人意料。
想法?
谢谢!
-罗杰-
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这就是正在发生的事情。但我同意,因为这很令人困惑
,我不知道为什么会出现这种情况,因为我认为第一个也将是密码。
This is what's happening. But I agree because this is confusing
I have no idea why this is the case because I had assumed it would also be pwd for the first one.
我记得很多个月前就遇到过这么多,所以我对实际来源进行了一些挖掘。以下是来自 File.java 的相关源文档:
因此,不明显的行为似乎是由于遗留原因造成的。
I remember encountering this many moons ago, so I did some digging in the actual source. Here is the relevant source documentation from File.java:
So, the non-obvious behavior appears to be due to legacy reasons.
双参数构造函数需要父目录名称,因此第二行查找相对路径为“/existing”的文件。在linux类型系统上,“/”是根(据我所知),因此/existing不太可能存在。在 Windows 上,我不确定默认情况下它会解释什么,但是如果我打开命令行并说
cd /Desktop
(工作目录是我的用户文件夹),它会说它不能找到指定的路径。The two argument constructor expects a parent directory name, so your second line looks for a file whose relative path is "/existing". On a linux type system, "/" is the root (as far as I know), so /existing is very unlikely to exist. On windows, I'm not sure what it interprets that as by default, but if I open up a command line and say
cd /Desktop
(working directory being my user folder) it says it can't find the path specified.来自 java.io.File:
没有提及默认目录是什么。
From java.io.File:
There's no mention of what the default directory is.
请记住,“”与 null 不同。因此
不假设 .目录。正如 @Dylan Halperin 所说,在 Linux 上使用“”定向到根/目录,正如我发现使用以下代码:
输出:
是的,我在工作目录中创建了一个名为“f1”的文件。
Remember that "" is NOT the same as null. Thusly
does not assume the . directory. As @Dylan Halperin said, on Linux using "" directs to the root / directory, as I found using this code:
Output:
Yes, I had created a file named "f1" in the working directory.