我正在运行第三方库,其部分操作是将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,这也行不通。
这真让我烦恼......我需要做些什么才能让它在OS X上运行?
> 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
此致 达里尔
答案 0 :(得分:3)
考虑Files.move
{{1}}的以下内容:
当调用移动非空目录时,如果不需要移动目录中的条目,则移动目录。例如,重命名同一FileStore上的目录通常不需要移动目录中的条目。移动目录时需要移动其条目,然后此方法失败(通过抛出IOException)。移动文件树可能涉及复制而不是移动目录,这可以使用copy方法与Files.walkFileTree实用程序方法一起完成。
这意味着此功能并非旨在跨网络或不同的FileStore移动文件。当你改变tmp位置时它适用于你,因为在这种情况下它只是简单地进行重命名而不是物理移动。
您没有提及如何选择“最终目录”,但如果是用户控制的话,它似乎必须是本地位置。