2013-03-09 1 views
1

Я запускаю стороннюю библиотеку, и часть ее операции - загрузить zip-файл в каталог temp, разархивировать его, а затем перенести с временный каталог до конечного каталога ... по какой-то причине это не удается, когда я оставляю свойство системы по умолчанию:java.nio.Files.move() - DirectoryNotEmptyException в OS X

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 

С уважением, Дэрил

ответ

2

Учитывая следующее из Java API Docs для Files.move:

При вызове для перемещения каталога, который не является пустым, то каталог перемещается, если это не требуется перемещение записей в каталоге. Например, переименование каталога в том же FileStore, как правило, не требует перемещения записей в каталоге. При перемещении каталога требуется, чтобы его записи были перемещены, тогда этот метод завершился неудачно (путем исключения исключения IOException). Для перемещения дерева файлов может потребоваться копирование, а не перемещение каталогов, и это можно сделать с помощью метода копирования в сочетании с утилитой Files.walkFileTree.

Это означает, что эта функция не предназначена для перемещения файлов по сетям или различным файловым хранилищам. Он работает для вас, когда вы меняете местоположение tmp, потому что в этом случае он просто выполняет переименование, а не физическое перемещение.

Вы не указали, как выбран «конечный каталог», но если он контролируется пользователем, кажется, что это должно быть локальное местоположение.

+0

Да, это было именно так. Я попросил, чтобы операция перемещала файл по томасам. –

 Смежные вопросы

  • Нет связанных вопросов^_^