1

サードパーティのライブラリを実行しています。その操作の一部は、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

よろしく、ダリル

4

1 に答える 1

4

Java API Docs forから次のように指定しますFiles.move

空でないディレクトリを移動するために呼び出された場合、ディレクトリ内のエントリを移動する必要がない場合は、ディレクトリが移動されます。たとえば、同じ FileStore のディレクトリの名前を変更する場合、通常、ディレクトリ内のエントリを移動する必要はありません。ディレクトリを移動するためにエントリを移動する必要がある場合、このメソッドは (IOException をスローして) 失敗します。ファイル ツリーを移動するには、ディレクトリを移動するのではなく、コピーする必要があります。これは、コピー メソッドを Files.walkFileTree ユーティリティ メソッドと組み合わせて使用​​することで実行できます。

これは、この関数がネットワークまたは異なる FileStore 間でファイルを移動するように設計されていないことを意味します。tmp の場所を変更すると、物理的な移動ではなく単に名前の変更が行われるため、うまくいきます。

「最終ディレクトリ」の選択方法については言及していませんが、ユーザーが制御する場合は、ローカルの場所である必要があるようです。

于 2013-03-09T14:57:16.210 に答える