我正在java.nio.file.Files.move(path, path.resolveSibling("newfilename"))
重命名Windows 7上的目录。
但我得到以下例外:
java.nio.file.AccessDeniedException: oldfilename -> newfilename
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
at java.nio.file.Files.move(Files.java:1345)
造成这种情况的原因是什么?我正在使用Java 7.
在调用Files.move()
之前,目标路径不存在。
更新
When moving a directory requires that its entries be moved then this method fails
(by throwing an IOException).
我的目录是非空的并且包含常规文件,所以也许这就是它不能在这里使用的原因?我在理解“要求移动其条目”的措辞方面遇到了问题。这是什么情况?
答案 0 :(得分:6)
在Windows资源管理器中打开目标目录时出现此问题。关闭Windows资源管理器使其正常工作。
答案 1 :(得分:2)
由于它是Windows,可能是目标路径存在并且正在被另一个进程使用..
答案 2 :(得分:1)
当其中一个路径是文件而另一个路径是目录时,我有同样的异常调用Files.move(path1, path2, StandardCopyOption.ATOMIC_MOVE)
。
答案 3 :(得分:0)
我的目录非空并且包含常规文件,所以也许就是这样 它不能在这里使用的原因?我遇到了问题 理解"要求移动其条目"措辞。什么时候 是这样的吗?
当目录移动到同一硬盘驱动器(和同一分区)的其他位置时,不必移动文件。 Files.move()
方法的作用是基本上重命名目录并保持文件保持不变。
顺便说一下,您可能会遇到此异常,因为此目录中的文件当前由您自己或其他应用程序读取。
答案 4 :(得分:0)
好的,所以我一直在尝试修复同样的异常,即使这个问题已经过了2年,我也会将其发布给别人可能会觉得有用。
我发现我的文件被标记为“只读”,取消选中后一切正常。
答案 5 :(得分:0)
我找到了答案。 在我的情况下,这是因为目录在Windows资源管理器中打开。
在某些情况下,Windows尝试加载预览,在文件上放置一个标志,以防止删除它。
您可以取消选择该图标或只关闭Windows资源管理器,问题就解决了。
答案 6 :(得分:0)
在我的情况下,目标文件夹已经存在,所以我先将其删除然后移动了源文件夹。