Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OS X上的java.nio.Files.move()-DirectoryNotEmptyException_Java_File_Osx Lion_Nio_Move - Fatal编程技术网

OS X上的java.nio.Files.move()-DirectoryNotEmptyException

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

我正在运行一个第三方库,它的部分操作是将一个zip文件下载到一个临时目录,解压缩它,然后将它从临时目录移动到一个最终目录。。。由于某些原因,当我将系统属性保留为默认值时,此操作失败:

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位置时,它对您有效,因为在这种情况下,它只是进行重命名,而不是物理移动


您没有提到“最终目录”是如何选择的,但如果它是用户控制的,那么它似乎必须是本地位置。

没错,就是这样。我已经要求该操作允许跨卷移动文件。是的,就是这样。我已要求该操作允许跨卷移动文件。