簡體   English   中英

使用 Files.move() 時出現 java.nio.file.AccessDeniedException

[英]java.nio.file.AccessDeniedException while using Files.move()

我正在做一個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).

我的目錄是非空的並且包含常規文件,所以也許這就是它不能在這里使用的原因? 我在理解“需要移動其條目”的措辭時遇到問題。 這是什么時候?

在Windows資源管理器中打開目標目錄時遇到此問題。 關閉Windows資源管理器使其工作。

因為它是Windows,所以可能是目標路徑存在並且正由另一個進程使用。

好的,所以我一直在嘗試修復同樣的異常,即使這個問題是2年我也會發布給別人可能會發現它很有用。

我發現我的文件標記為“只讀” ,取消選中后一切正常。

當其中一個路徑是文件而另一個 - 目錄時Files.move(path1, path2, StandardCopyOption.ATOMIC_MOVE)我有同樣的異常調用Files.move(path1, path2, StandardCopyOption.ATOMIC_MOVE)

我的目錄是非空的並且包含常規文件,所以也許這就是它不能在這里使用的原因? 我在理解“要求移動其條目”的措辭方面遇到了問題。 這是什么情況?

當目錄移動到同一硬盤驅動器(和相同分區)的其他位置時,不必移動文件。 Files.move()方法的作用基本上是重命名目錄並保持文件不變。

順便說一下,您可能會遇到此異常,因為此目錄中的文件當前由您自己或其他應用程序讀取。

我找到了答案。 在我的情況下,這是因為目錄在Windows資源管理器中打開。

在某些情況下,Windows嘗試加載預覽,在文件上放置一個標志,以防止刪除它。

我在談論這個圖標: 在此輸入圖像描述

您可以取消選擇該圖標或只關閉Windows資源管理器,問題就解決了。

在我的情況下,目標文件夾已經存在,所以我先刪除它,然后移動源文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM