【发布时间】:2012-08-21 19:02:46
【问题描述】:
我正在使用带有 java 7 update 6 的 Windows-7,发现这种奇怪的(至少对我而言)行为 -
我有两个文件 E:\delete1.txt 和 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 的相同操作会有不同的行为?
【问题讨论】:
-
如果你交换你正在删除的文件,即
NIOapi 删除delete1.txt和旧的 apiFile删除delete2.txt会发生什么? -
@MichaelBorgwardt 为什么很奇怪?他只是想删除一个文件(恰好是只读的)
-
@assylias: 奇怪与否,这肯定是一个边缘案例
-
@MichaelBorgwardt 那么你是说对于相同的功能有不一致的行为是可以的吗? .. 如果是这种情况,那么 nio 不是 File API 的真正替代品,如果不一致,那么两个实现中的一个必须是正确的,另一个是错误的。
-
这不是很好,因为它是不可避免的,除非有一个具有严格定义的行为的官方 API,两个实现都明确声称要实现,而这里不是这种情况。