Java не может переместить (переименовать) файл, если результирующий файл находится в другой файловой системе.

Программа, в которой мы ошиблись при попытке переместить файлы из одного каталога в другой. После долгой отладки я обнаружил ошибку, написав небольшую утилиту, которая просто перемещает файл из одного каталога в другой (код ниже). Оказывается, при перемещении файлов в локальной файловой системе все работает нормально, а попытка переместить файл в другую файловую систему не удалась.

Почему это? Вопрос может быть специфичным для платформы — мы используем Linux на ext3, если это имеет значение.

И второй вопрос; должен ли я использовать что-то еще, кроме метода renameTo()класса File? Кажется, что это работает только в локальных файловых системах.

Тесты (запуск от имени пользователя root):

touch /tmp/test/afile

java FileMover /tmp/test/afile /root/
The file move was successful

touch /tmp/test/afile

java FileMover /tmp/test/afile /some_other_disk/
The file move was erroneous

Код:

import java.io.File;

public class FileMover {
    public static void main(String arguments[] ) throws Exception {
        boolean success;
        File file = new File(arguments[0]);
        File destinationDir = new File(arguments[1]);
        File destinationFile = new File(destinationDir,file.getName() );
        success = file.renameTo(destinationFile);
        System.out.println("The file move was " + (success?"successful":"erroneous"));
    }
}
9
задан River 1 March 2017 в 23:47
поделиться