Моя программа Java должна синхронно перемещать файл на сервере, т.е. в пределах одного и того же набора локальных файловых систем. Очевидным решением является использование Files.move(). Тем не менее, я читал, что в некоторых случаях, например. в файловых системах движение будет возвращаться к копированию и удалению. Когда я перемещаю большие файлы, я хотел бы сообщить о прогрессе пользователю, если произойдет копия (так как будет заметная задержка).
Однако я не могу найти простой способ сделать это с помощью Java API. Я мог бы написать свою собственную процедуру копирования, которая сообщает о прогрессе, но тогда мне нужно будет знать, приведет ли движение к копированию.
Кажется, что одна из возможностей:
try {
Files.move(src, dest, CopyOption.ATOMIC_MOVE);
} catch (AtomicMoveNotSupportedException e) {
// Perform a copy instead (and report progress)
}
Однако мне это не понятно из Java doco, если бы это было правильно во всех случаях. Действительно ли это правильное решение? Если нет, есть ли другой способ?