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

标签 java file osx-lion nio move

我正在运行第 3 方库,其操作的一部分是将 zip 文件下载到临时目录,解压缩,然后将其从临时目录 move 到最终目录...出于某种原因,这当我将系统属性保留为默认值时失败:

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

问候, 达里尔

最佳答案

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

When invoked to move a directory that is not empty then the directory is moved if it does not require moving the entries in the directory. For example, renaming a directory on the same FileStore will usually not require moving the entries in the directory. When moving a directory requires that its entries be moved then this method fails (by throwing an IOException). To move a file tree may involve copying rather than moving directories and this can be done using the copy method in conjunction with the Files.walkFileTree utility method.

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

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

关于java.nio.Files.move() - OS X 上的 DirectoryNotEmptyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310799/

相关文章:

objective-c - Objective C 文件读取过程中出现异常?

java - Java中如何让玩家只能跳跃一定高度?

java - 如何去除图像中的颜色

file - 为什么 touch 会调用 dup2() 系统调用?

linux - 检测代码是否读取了指定的输入文件

objective-c - 有没有办法同时运行 2 个 NSAnimation 对象?

objective-c - 如何使用 libstrophe 构建 jabber 客户端

java - 当我尝试缓冲字符串时,我的代码中哪里搞砸了?

java - 在java中打印BST中的所有路径

c - 读取文件时出错 "fgetc"(溢出)