【问题标题】:file.renameTo(newFile) not working in Javafile.renameTo(newFile) 在 Java 中不起作用
【发布时间】:2014-09-21 06:35:20
【问题描述】:

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

我的代码如下:

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++;

【问题讨论】:

  • 这是什么操作系统?
  • 将 if 语句的第一行添加为 bw.close();它可能会起作用。在所有操作系统中仍然不可靠
  • 这是在 Windows 上运行的

标签: java file rename


【解决方案1】:

你需要关闭 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();

【讨论】:

    【解决方案2】:

    嗯,关闭 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】:

      在 Windows 上,打开的文件被隐式锁定。如果您不想要此功能,请不要使用 Windows(我假设您可以采取一些技巧来避免这种情况发生)

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

      解决方案总是在尝试重命名文件之前关闭文件,即使在 Unix 上也是一个好习惯。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-08-20
          • 2013-07-16
          • 2018-05-15
          • 2015-05-27
          • 2021-09-20
          • 2015-11-23
          • 2014-02-12
          • 2015-01-31
          • 1970-01-01
          相关资源
          最近更新 更多