我希望删除已打开并完成写入但未关闭的文件。请参考以下代码:
类A(不可更改):
import java.io.FileOutputStream;
public class A {
public void run(String file) throws Exception {
FileOutputStream s = new FileOutputStream(file);
}
}
类B:
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class B {
public static void main(String[] args) throws Exception {
String path = "D:\\CONFLUX_HOME\\TestClient\\Maps\\test\\newTest.txt";
A a = new A();
a.run(path);
File f = new File(path);
Files.delete(Paths.get(f.getAbsolutePath()));
}
}
在A类中,只需打开流而不关闭文件。 在B类中,调用A的run方法,然后尝试删除文件。 由于文件仍然处于打开状态,因此无法删除该文件。
错误信息为: 由于另一个进程正在使用该文件,因此无法访问该文件。
实际情况是: 我们正在动态加载jar文件。 jar文件内部的类正在创建文件。当出现异常时,会创建一个大小为0字节的文件。我们需要删除此文件。由于在异常期间文件未关闭,因此无法删除该文件。
如果我们可以关闭jar类中的流,则可以解决此问题,但我们无法修改创建文件的jar文件,因为它们是特定于客户端的jar文件。
请建议如何在不修改A类代码的情况下删除已打开的文件。