Переименование файла без использования renameTo() - Java - программирование

Переименование файла без использования renameTo() - Java

Не считая моего последнего сообщения, я нашел источник проблемы. Я использую

a.renameTo(b)

когда b не существует. Причина, по которой он не существует, состоит в том, что существует символическая ссылка, поэтому, если b является /usr/name/folder/file, то b действительно является /mnt/MountTest, потому что символическая ссылка относится к этому каталогу.

Итак, вопрос в том, есть ли альтернативный способ переименования файла в Java с использованием строкового значения? Если нет, как эта процедура переименования может быть выполнена иначе?

4b9b3361

Ответ 1

Переименование переименовало бы его... если бы оно было в одной и той же файловой системе.

Если сбой renameTo() завершен, вам необходимо скопировать его в новое место, а затем удалить оригинал.

Ответ 2

Переименование файлов также очень проблематично в отношении файловых систем. См. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4073756. В комментариях к отчету об ошибке был добавлен пример кода, а также указано, что вы можете использовать Process.exec. Оба Apache Commons IO и Google Guava имеют утилиты для безопасного перемещения файлов:

Ответ 3

Я думаю, вы что-то путаете. Файл java.util.File не представляет файл в какой-либо файловой системе. Он представляет собой путь к файлу.

Ответ 4

Проблема заключается не в том, что задействована символическая ссылка; проблема заключается в том, что вы не можете атомарно переименовывать файловые системы. Мета-проблема заключается в том, что операции с файлами Java плохо разработаны и не вызывают правильных исключений и не содержат кодов ошибок, когда что-то не работает!

Ответ 5

Как насчет:

a.renameTo(new File("/your/path/here/");