Функция Java renameTo () не перемещает файл - PullRequest
1 голос
/ 04 января 2011

В медиа-модуле работает следующий Java-код:

File file = new File("/my/path/"+String.format("%02d", date)+"/"+streamAliasRef+".mp4");

        // Destination directory
        File dir = new File("/mnt/s3");

        // Move file to new directory
        boolean success = file.renameTo(new File(dir, file.getName()));
        if (!success) {
            getLogger().info("File failed to move to s3"+file.getName());
        }
        else {
            getLogger().info("File moved to s3 successfully"+ file.getName());
        }

По какой-то причине я постоянно получаю сообщение "Файл не может быть перемещен в s3"

Я довольно новичок в Java, так что простите, если это простая проблема. Я точно знаю, что оба каталога существуют. Одно важное замечание, которое может иметь к этому отношение: я использую Fuse для монтирования корзины S3 в файловую систему.

Ответы [ 3 ]

7 голосов
/ 04 января 2011

В Java, работающей в Unix, renameTo работает, только если вы находитесь в той же файловой системе. Поэтому, если вы перемещаетесь по файловым системам, вам нужно будет скопировать и удалить оригинал. Команда unix mv делает это также. Вот почему mv работает в одной и той же файловой системе, но всегда действует в файловых системах. Он обнаруживает различные файловые системы и в этом случае удаляет копию.

2 голосов
/ 04 января 2011

Я использую этот метод из Guava для перемещения файлов в Unix, чтобы обойти эту проблему: public static void move(File from, File to) throws IOException { Preconditions.checkNotNull(to); Preconditions.checkArgument(!from.equals(to), "Source %s and destination %s must be different", from, to); if (!from.renameTo(to)) { copy(from, to); if (!from.delete()) { if (!to.delete()) { throw new IOException("Unable to delete " + to); } throw new IOException("Unable to delete " + from); } } }

1 голос
/ 04 января 2011

Прежде всего, вы уверены, что

new File("/my/path/"+String.format("%02d", date)+"/"+streamAliasRef+".mp4") 

действительно существует?Не могли бы вы проверить с помощью file.exists(), прежде чем пытаться переместить его?

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