我想删除已打开并写入但未关闭的文件。请引用以下代码:
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 中的代码。
最佳答案
确保关闭文件,即使写入文件时出现异常也是如此。
例如
public void run(String file) throws Exception {
FileOutputStream s = null;
try {
s = new FileOutputStream(file);
} finally {
try {
s.close();
} catch(Exception e) {
// log this exception
}
}
}
关于Java 在一个类中打开文件流并在另一个类中关闭/删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842365/