在 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 或类似文件(如果它不是太大)然后释放它以便其他线程或进程可以访问它。我的意思是,与在完全处理文件时保持打开文件相比,读取文件的速度要快得多。
如果读取时只需要更改文件名但内容保持不变,我会创建该文件的临时副本并从该副本读取。
这样您就不会锁定原始文件并且仍然可以访问内容。
我现在正在编写一个 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 或类似文件(如果它不是太大)然后释放它以便其他线程或进程可以访问它。我的意思是,与在完全处理文件时保持打开文件相比,读取文件的速度要快得多。
如果读取时只需要更改文件名但内容保持不变,我会创建该文件的临时副本并从该副本读取。
这样您就不会锁定原始文件并且仍然可以访问内容。