Java 在一个类中打开文件流并在另一个类中关闭/删除文件

标签 java file stream

我想删除已打开并写入但未关闭的文件。请引用以下代码:

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/

相关文章:

java - 有没有办法查询spring容器的bean

Java 6 文件删除

java - 为什么 java DirectoryStream 执行这么慢?

php - 使用 html5 getusermedia 创建 webm 文件并将其实时发送到服务器

c++ - 为什么循环是无限的?

c++ - 文件加载太慢! (C++)

java - 如何在java中获取给定的日期字符串格式(模式)?

java - 使用通用父类型输入参数强制执行动态多态调用

java - 在 Web 应用程序中实现套接字

python - 在 python 中将 ASCII 字符串写为二进制