Как правильно переименовать файл в Java? - PullRequest
4 голосов
/ 25 июля 2011

Что я имею в виду под «правильным» переименованием файла:

  1. Он должен работать на разных платформах.

  2. Он должен обрабатывать каким-то образомслучаи, когда:

    1. файл заблокирован
    2. файл с «новым» именем уже существует
    3. на диске недостаточно свободного места для завершения операции.

Существуют ли общие решения / библиотеки / стратегии?

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Как описано в Javadoc:

Переименовывает файл, обозначенный этим абстрактным путем. Многие аспекты Поведение этого метода по своей природе зависит от платформы: Операция переименования может быть не в состоянии переместить файл из одной файловой системы с другой стороны, он не может быть атомарным, и он может не сработать, если файл с целевым абстрактным путем уже существует. Возврат значение всегда должно быть проверено, чтобы убедиться, что операция переименования был успешным.

Вот пример:

// The File (or directory) with the old name
File oldFile = new File("old.txt");

// The File (or directory) with the new name
File newFile = new File("new.txt");

// Rename file (or directory)
boolean success = oldFile.renameTo(newFile);
if (!success) {
    // File was not successfully renamed
}

Мой совет - проверить логическое значение success и использовать стандартный подход, определенный в API.

1 голос
/ 25 июля 2011

google guava lib содержит метод Files.move (..), который подтверждает некоторые ваши требования - на самом деле он пытается переместить файл с помощью File.renameTo () и, в случае неудачи, пытается скопировать и стратегия удаления источника.

Я не знаю библиотек, которые проверяют свободное место, так как свободное пространство может изменяться во время перемещения / копирования, и единственный способ последовательно обрабатывать малое пространство - это использовать метод копирования / перемещения для возврата специального кода ошибки / исключения, указывающего на причина сбоя - какой текущий Java File API не имеет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...