我需要在每个新的输入流上调用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()一次。


忽略 close() 位置是否最终和代码需要尝试 catch 。


所有。


智慧大石
浏览 95回答 3
3回答

呼啦一阵风

是的,您需要对每个人进行关闭。代码的问题在于,每次创建新流时都要重新分配变量。换句话说:不再指向旧的,所以调用关闭不会关闭以前的流。InputStreamfisfisInputStream有关详细信息,请查看 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}

临摹微笑

您需要每次都调用 close 方法,但现在不用担心。从 Java SE 7 中,您可以使用 .根据Java-Oracle Doc,try-with-resources使用资源试用语句是声明一个或多个资源的 try 语句。资源是在程序完成之后必须关闭的对象。资源试用语句确保在语句末尾关闭每个资源。任何实现 java.lang.AutoCloseable 的对象(包括实现 java.io.Closeable 的所有对象)都可以用作资源。请看一下例子。static String readFirstLineFromFile(String path) throws IOException {    try (BufferedReader br =                   new BufferedReader(new FileReader(path))) {        return br.readLine();    }}在此示例中,在 try-with-resources 语句中声明的资源是 BufferedReader。声明语句显示在 try 关键字后面的括号内。在 Java SE 7 及更高版本中,BufferedReader 类实现了 java.lang.AutoCloseable 接口。由于 BufferedReader 实例是在 try-with-resource 语句中声明的,因此无论 try 语句是正常完成还是突然完成(由于方法 BufferedReader.readLine 引发 IOException),它都将关闭。有关更多详细信息,请查看 Oracle-Java 文档以获取 。try-with-resourceshttps://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

红糖糍粑

每次使用 InputStream 时,您都必须关闭。在 java 中,如果分配 fis = new FileInputStream(new File("D:\\za180s.ser"));fis将指向新对象,因此当您调用fis.close()时,旧流不受影响。而且没有办法关闭它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java