3 回答
TA贡献1802条经验 获得超6个赞
是的,您需要对每个人进行关闭。代码的问题在于,每次创建新流时都要重新分配变量。换句话说:不再指向旧的,所以调用关闭不会关闭以前的流。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
}
TA贡献1982条经验 获得超2个赞
您需要每次都调用 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-resources
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
TA贡献1815条经验 获得超6个赞
每次使用 InputStream 时,您都必须关闭。
在 java 中,如果分配
fis = new FileInputStream(new File("D:\\za180s.ser"));
fis将指向新对象,因此当您调用fis.close()时,旧流不受影响。而且没有办法关闭它。
添加回答
举报