Как переименовать файл в другую файловую систему? - PullRequest
3 голосов
/ 17 августа 2011

У меня возникла странная проблема при использовании renameTo ().Я не знаю, почему я не могу переименовать в /mnt/desttest, но можно переименовать в /home/kit.ho/desttest.Тем не менее, я уже даю каждое разрешение на запись в / mnt /.Возвращаемое значение ложно, пока нет конкретной причины.Кто знает причину?

import java.io.File;
public class renameFile {
    public static void main(String[] args) {
        File sourceFile = new File("/home/kit.ho/test");  
        File targetFile1 = new File("/mnt/desttest");  
        System.out.println("source file is exist? " + sourceFile.exists() + ", source file => " + sourceFile);  
        System.out.println(targetFile1 + " is exist? " + targetFile1.exists());  
        System.out.println("rename to " + targetFile1 + " => " + sourceFile.renameTo(targetFile1));  
        System.out.println("source file is exist? " + sourceFile.exists() + ", source file => " + sourceFile);   
    }
}

Редактировать: Наконец, основываясь на некоторых ответах, функция переименования не работает в файловой системе, есть ли обходной путь в этом вопросе, не вызывая внешнюю команду, такую ​​как "mv"?

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

Вы не можете сделать переименование в файловых системах (разделах).

4 голосов
/ 17 августа 2011

Создайте метод для копирования файла и вызовите этот метод (это то, что я использую, когда renameTo () не работает):

void copyFile(File source, File destination) throws Exception {
  FileInputStream inputStream = new FileInputStream(source);
  FileOutputStream outputStream = new FileOutputStream(destination);
  int b = -1;
  while ((b = inputStream.read()) != -1) {
    outputStream.write(b);
  }
  inputStream.close();
  outputStream.close();
}

edit: если вы хотите переместить файл, удалите оригинал после созданиякопия.

edit: еще лучше было бы FileUtils.moveFile () из библиотеки Apache Commons

2 голосов
/ 17 августа 2011

Простое решение «не изобретать велосипед» - использовать Apache Commons IO.Он имеет FileUtils # moveFile () , который отвечает за обработку различных разделов.

1 голос
/ 17 августа 2011

File.renameTo может дать сбой, если вы перемещаетесь по файловым системам или пытаетесь перезаписать существующий файл. См. документы .

У вас также может быть проблема, поскольку / mnt является специальным местоположением и может иметь другие атрибуты, которые не позволяют вам что-либо перемещать в /mnt.

.
...