在 Java 中打开时从外部重命名文件

Rename file from outside when it's opened in Java

我现在正在编写一个 Java 应用程序,它必须读取一个文件。 我正在使用这种方法:

BufferedReader mb_reader = new BufferedReader(new FileReader(f1));
int lines = 0;
while (null != (mb_line = mb_reader.readLine())) {
    lines++;
    //something to do
}

一切正常,但可能必须从外部更改文件(例如)。

我有一个方法可以测试文件是否存在,然后打开这个 reader。 但是,如果我现在尝试重命名 Windows Explorer 中的文件,它只是说该文件是在 Java 中打开的,无法重命名。

有没有什么办法可以在打开的情况下重命名?

您需要关闭流才能将文件释放到系统,我认为没有直接的解决方法。

您可以有一份工作副本供您不时地阅读和检查该文件,了解您可能期望的更改。

也许您应该首先将文件完全读入 StringBuilder 或类似文件(如果它不是太大)然后释放它以便其他线程或进程可以访问它。我的意思是,与在完全处理文件时保持打开文件相比,读取文件的速度要快得多。

如果读取时只需要更改文件名但内容保持不变,我会创建该文件的临时副本并从该副本读取。

这样您就不会锁定原始文件并且仍然可以访问内容。