我正在使用带有 java 7 update 6 的 Windows-7 并发现这种奇怪的(至少对我来说)行为 -
我有两个文件E:\delete1.txt
and E:\delete2.txt
两者都是只读文件,当我尝试删除如下文件时,它会被删除而没有任何问题 -
File file = new File("E:\\delete1.txt");
assertTrue(file.delete());
但是当我使用 nio API 删除文件时,如下所示 -
Path path = Paths.get("E:\\delete2.txt");
Files.delete(path);
它抛出java.nio.file.AccessDeniedException
.
为什么旧版和新版 nio API 的相同操作会有不同的行为?
正如所讨论的here http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-August/011314.html- 问题是java.io.File
有很多奇怪的地方,在Windows上
特别的。在这种情况下,它会在删除之前重置文件属性
文件,所以这就是为什么它不会像预期的那样失败。这是
这种行为可以追溯到 10 年前,因此现在改变是有风险的。
它还有其他几个类似的奇怪之处,这只是其原因之一
没有重新实现以使用新的 API。
如果我们尝试从命令窗口删除文件,那么 Windows 会抛出相同的(访问被拒绝)错误,但文件会从资源管理器窗口中删除。看来File#delete()
有一个错误的实现和新的Files#delete(Path)
应该是首选。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)