can file.rename要替换现有文件吗?

时间:2011-07-04 08:24:24

标签: java file file-io

// File (or directory) to be moved
File file = new File("filename");

// Destination directory
File dir = new File("directoryname");

// Move file to new directory
boolean success = file.renameTo(new File(dir, file.getName()));
if (!success) {
    // File was not successfully moved
    //can it be because file with file name already exists in destination?
}

如果目的地中已存在名称为'filename'的文件,则会将其替换为新文件吗?

3 个答案:

答案 0 :(得分:10)

根据Javadoc

  

此方法行为的许多方面本质上是依赖于平台的:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果目标抽象路径名已存在的文件,则可能无法成功。应始终检查返回值以确保重命名操作成功。

答案 1 :(得分:2)

来自Javadoc:

  

重命名操作可能无法执行   将文件从一个文件系统移动到   另外,它可能不是原子的,而且   如果一个文件有,它可能不会成功   目标抽象路径名   已经存在。

我测试了以下代码:

它第一次运行,第二次按预期失效。 要移动文件,您应该删除或重命名目标。

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File( "c:\\filename" );
        file.createNewFile();
        File dir = new File( "c:\\temp" );
        boolean success = file.renameTo( new File( dir, file.getName() ) );
        if ( !success ) {
            System.err.println( "succ:" + success );
        }
    }
}

答案 2 :(得分:0)

因为它是系统相关的你不应该期望它以这种或其他方式行事。检查并实现自己的逻辑。