1

我正在运行第 3 方库,它的部分操作是将 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

问候,达里尔

4

1 回答 1

4

鉴于Java API Docs中的以下内容Files.move

当调用移动非空目录时,如果不需要移动目录中的条目,则移动目录。例如,重命名同一 FileStore 上的目录通常不需要移动目录中的条目。当移动目录需要移动其条目时,此方法将失败(通过抛出 IOException)。移动文件树可能涉及复制而不是移动目录,这可以使用复制方法和 Files.walkFileTree 实用程序方法来完成。

这意味着此功能并非旨在跨网络或不同 FileStore 移动文件。当您更改 tmp 位置时,它对您有用,因为在这种情况下,它只是进行重命名而不是物理移动。

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

于 2013-03-09T14:57:16.210 回答