OS X上的java.nio.Files.move()-DirectoryNotEmptyException
我正在运行一个第三方库,它的部分操作是将一个zip文件下载到一个临时目录,解压缩它,然后将它从临时目录移动到一个最终目录。。。由于某些原因,当我将系统属性保留为默认值时,此操作失败:OS X上的java.nio.Files.move()-DirectoryNotEmptyException,java,file,osx-lion,nio,move,Java,File,Osx Lion,Nio,Move,我正在运行一个第三方库,它的部分操作是将一个zip文件下载到一个临时目录,解压缩它,然后将它从临时目录移动到一个最终目录。。。由于某些原因,当我将系统属性保留为默认值时,此操作失败: java.nio.file.DirectoryNotEmptyException: /var/folders/j_/1v53z7q15v51wyb00jzht_ch0000gn/T/vertx-68e24a9e-ee15-4b49-a796-7176714865ec at sun.nio.fs.UnixCop
java.nio.file.DirectoryNotEmptyException: /var/folders/j_/1v53z7q15v51wyb00jzht_ch0000gn/T/vertx-68e24a9e-ee15-4b49-a796-7176714865ec
at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:491)
at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:261)
at java.nio.file.Files.move(Files.java:1345)
...
但是,如果我将java.io.tmpdir设置为.tmp(并在我的工作目录中创建一个.tmp目录),它就可以工作了
如果我使用sudo,这也不起作用
这真让我生气。。。我需要做什么才能让它在OSX上工作
> java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
> uname -a
Darwin daryl-teos-macbook-pro.fritz.box 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64
问候,,
Daryl从for
文件中给出以下内容。移动
:
调用以移动非空目录时,如果不需要移动目录中的条目,则会移动该目录。例如,重命名同一文件存储上的目录通常不需要移动目录中的条目。当移动目录需要移动其条目时,此方法失败(通过引发IOException)。移动文件树可能涉及复制而不是移动目录,这可以使用copy方法和Files.walkFileTree实用程序方法来完成
这意味着此函数不是为跨网络或不同文件存储区移动文件而设计的。当您更改tmp位置时,它对您有效,因为在这种情况下,它只是进行重命名,而不是物理移动
您没有提到“最终目录”是如何选择的,但如果它是用户控制的,则它似乎必须是本地位置。从for
文件中给出了以下内容。移动
:
调用以移动非空目录时,如果不需要移动目录中的条目,则会移动该目录。例如,重命名同一文件存储上的目录通常不需要移动目录中的条目。当移动目录需要移动其条目时,此方法失败(通过引发IOException)。移动文件树可能涉及复制而不是移动目录,这可以使用copy方法和Files.walkFileTree实用程序方法来完成
这意味着此函数不是为跨网络或不同文件存储区移动文件而设计的。当您更改tmp位置时,它对您有效,因为在这种情况下,它只是进行重命名,而不是物理移动
您没有提到“最终目录”是如何选择的,但如果它是用户控制的,那么它似乎必须是本地位置。没错,就是这样。我已经要求该操作允许跨卷移动文件。是的,就是这样。我已要求该操作允许跨卷移动文件。