file.renameTo(newFile)不能在Java中工作

时间:2014-07-29 18:55:04

标签: java file rename

我已多次看过这个问题,但我找不到适用于我的解决方案。我正在尝试将文件重命名为新文件名。我每次都变得虚假,并且不确定为什么像其他大多数人一样有同样的问题。

我的代码如下:

File file = new File("filePath.log");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));

for(int i = 1 ; i < 300 ; i++){
    bw.write(i);

    if(i % 100 == 0){
        File newFile = new File("filePath2.log");
        if(file.renameTo(newFile)){
             System.out.println("true");
        } else{
             System.out.println("false");
        }
        file = new File("filePath.log");
        bw = new BufferedWriter(new FileWriter(file));
    }
}

任何帮助表示赞赏!

编辑:

我能够使用Files.move方法

解决问题
bw.close();
String newFilePath  ="C:/opt/streamserve/projroot/applications/RFC_SAP_T1/wd/rfcgateway07122014" + move + ".log";
File newFile = new File(newFilePath);
Files.move(file.toPath(), newFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
file = new File("C:/opt/streamserve/projroot/applications/RFC_SAP_T1/wd/rfcgateway.log");
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
move++;

4 个答案:

答案 0 :(得分:3)

您需要关闭BufferedWriter。否则,该文件正在使用中,无法重命名(至少在运行Windows的机器上)

答案 1 :(得分:2)

在Windows上,隐式锁定打开的文件。如果你不想要这个功能,不要使用windows(我假设有一个hack你可以做到没有发生这种情况)

问题是您无法重命名已锁定的文件。在Unix下,只有你明确地执行此操作才会锁定文件,在Windows中只需打开它就可以锁定它。

在尝试重命名之前,解决方案始终关闭您的文件,即使在Unix上也是如此。

答案 2 :(得分:0)

好吧,关闭BufferedWriter,您的文件将保存在磁盘上,您可以访问它。

你可以为BufferedWriter获取这个调用close方法:

File file = new File("filePath.log");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));

for(int i = 1 ; i < 300 ; i++){
    bw.write(i);

    if(i % 100 == 0){
        File newFile = new File("filePath2.log");
        bw.close();
        if(file.renameTo(newFile)){
             System.out.println("true");
        } else{
             System.out.println("false");
        }
        file = new File("filePath.log");
        bw = new BufferedWriter(new FileWriter(file));
    }
}

答案 3 :(得分:0)

您需要关闭BufferedWriter,否则它将不会写入文件。你的文件将是空的。 请尝试以下方法: -

    File file = new File("filePath.log");
    BufferedWriter bw = new BufferedWriter(new FileWriter(file));

    for(int i = 1 ; i < 300 ; i++){
        bw.write(i);
        if(i % 100 == 0){
            bw.close();
            File newFile = new File("filePath"+i+".log");
            if(file.renameTo(newFile)){
                 System.out.println("true");
            } else{
                 System.out.println("false");
            }
            file = new File("filePath.log");
            bw = new BufferedWriter(new FileWriter(file));
        }
    }
    bw.close();