首页 > 解决方案 > 我需要在每个新的输入流上调用 close() 吗?

问题描述

这是代码。

public static void main(String[] args) throws IOException {

    FileInputStream fis = null;

    fis = new FileInputStream(new File("D:\\za180s.ser"));
    // do something
    fis = new FileInputStream(new File("D:\\za185s.ser"));
    // do something
    fis = new FileInputStream(new File("D:\\za186s.ser"));
    // do something
    fis = new FileInputStream(new File("D:\\za187s.ser"));
    // do something
    fis.close();

}

问题是:我需要在每次“做某事”之后调用 fis.close() 方法,或者我只调用 fis.close() 一次。

忽略 finally 中的 close() 位置和代码是否需要 try catch。

谢谢大家。

标签: javainputstream

解决方案


是的,您需要在每个人上调用 close InputStream。您的代码的问题是fis每次创建新流时都要重新分配变量。换句话说:fis不再指向 old InputStream,所以调用 close 不会关闭前一个流。

有关更多信息,请查看https://stackoverflow.com/a/40523/8819761

您还可以使用 Java 7 的 try-with-resources 语法,一旦您退出 try 块,它将自动关闭流:

try (InputStream fis = new FileInputSteam(yourFile)) {
  // Do something
}

try (InputStream fis = new FileInputSteam(yourFile)) {
  // Do something else
}

推荐阅读