我正在使用带有java 7更新6的Windows-7并发现这个奇怪的(至少对我而言)行为 -
我有两个文件E:\delete1.txt并且E:\delete2.txt都是只读文件,当我尝试删除文件时,如果它被删除而没有任何问题 -
File file = new File("E:\\delete1.txt");
assertTrue(file.delete());
Run Code Online (Sandbox Code Playgroud)
但是当我使用nio API删除文件时如下 -
Path path = Paths.get("E:\\delete2.txt");
Files.delete(path);
Run Code Online (Sandbox Code Playgroud)
它抛出java.nio.file.AccessDeniedException.
为什么使用旧的和新的nio API进行相同操作的行为不同?
Pre*_*raj 13
正如这里所讨论的那样- 问题是java.io.File在Windows上有许多奇怪之处,特别是在Windows上.在这种情况下,它会在删除文件之前重置文件属性,这就是为什么它不会像预期的那样失败的原因.这种行为的历史可以追溯到10年前,所以现在改变是有风险的.它还有其他一些奇怪的东西,这也是为什么没有重新实现使用新API的原因之一.
如果我们尝试从命令窗口中删除该文件,则Windows会抛出相同的(拒绝访问)错误,但文件会从资源管理器窗口中删除.它似乎File#delete()有一个错误的实现,而新的Files#delete(Path)应该是首选.
| 归档时间: |
|
| 查看次数: |
12687 次 |
| 最近记录: |