使用 Files.move() 时出现 java.nio.file.AccessDeniedException

问题描述 投票:0回答:7

我正在执行

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()
之前目标路径不存在。

更新

来自javadoc

When moving a directory requires that its entries be moved then this method fails
(by throwing an IOException).

我的目录非空并且包含常规文件,所以也许这就是它不能在这里使用的原因?我无法理解“要求移动其条目”的措辞。什么时候有这样的情况?

java file nio
7个回答
10
投票

当目标目录在 Windows 资源管理器中打开时,我遇到了这个问题。关闭 Windows 资源管理器即可正常工作。


3
投票

由于是Windows,可能目标路径存在并且正在被另一个进程使用..


3
投票

好吧,所以我自己一直在尝试修复相同的异常,即使这个问题已经有 2 年了,我会将其发布给其他人,可能会发现它有用。

我发现我的文件被标记为“只读”,取消选中后一切正常。


1
投票

我的目录非空并且包含常规文件,所以也许是这样 它不能在这里使用的原因是什么?我遇到问题了 理解“要求移动其条目”的措辞。什么时候 是这样吗?

当目录移动到同一硬盘驱动器(和同一分区)的其他位置时,不必移动文件。

Files.move()
方法的作用基本上是重命名目录并保持文件不变。

顺便说一句,您可能会遇到此异常,因为此目录中的文件当前已被您自己的或其他应用程序读取。


1
投票

我找到了答案。 就我而言,这是因为该目录是在 Windows 资源管理器中打开的。

在某些情况下,Windows 尝试加载预览,在文件上放置一个标志以防止删除它。

我说的是这个图标:enter image description here

您可以取消选择该图标或直接关闭 Windows 资源管理器即可解决问题。


0
投票

就我而言,目标文件夹已经存在,所以我先将其删除,然后移动源文件夹。


0
投票

我正在将 Webstorm 与 Remix 项目一起使用,当我尝试重命名文件夹时,我必须停止该项目,进行重命名重构,然后启动项目。

© www.soinside.com 2019 - 2024. All rights reserved.