如何将文件重命名为另一个文件系统?

时间:2011-08-17 03:50:42

标签: java file rename

我在使用renameTo()时遇到了一个奇怪的问题。我不知道为什么我不能重命名为/mnt/desttest,但可以重命名为/home/kit.ho/desttest。但是,我已经将每个写入权限授予/ mnt /。返回值为false,没有具体原因。谁知道原因?

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 个答案:

答案 0 :(得分:6)

您无法跨文件系统(分区)进行重命名。

答案 1 :(得分:4)

创建一个复制文件的方法并调用此方法(这是我在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();
}

编辑:如果要移动文件,请在复制后删除原件。

编辑:更好的是FileUtils.moveFile() from Apache Commons library

答案 2 :(得分:2)

简单的不要重新发明轮子'解决方案是使用Apache Commons IO。它有FileUtils#moveFile()来处理不同的分区。

答案 3 :(得分:1)

如果您正在跨文件系统移动,或者您尝试覆盖现有文件,则

File.renameTo可能会失败。请参阅docs

您也可能遇到问题,因为/ mnt是special purpose location,并且可能有其他属性阻止您将某些内容移入/ mnt。