Java中关闭输入流的方法有哪些?不同场景下的最佳实践是?
- 后端开发
- 2025-09-29
- 6
在Java中,关闭一个InputStream或Reader通常意味着关闭与之关联的输入流,这可以通过调用流的close()方法来完成,以下是一些常用的方法来关闭Java中的输入流。
关闭InputStream
当使用InputStream及其子类(如FileInputStream、BufferedInputStream等)时,以下是一些关闭输入流的常用方法:

| 方法 | 描述 |
|---|---|
| void close() | 关闭此输入流并释放与之关联的任何系统资源。 |
| void closeQuietly(InputStream in) | 尝试关闭指定的输入流,如果发生异常则不抛出。 |
| void closeQuietly(InputStream in, String message) | 尝试关闭指定的输入流,如果发生异常则记录指定的消息。 |
以下是一个使用FileInputStream的示例:
import java.io.FileInputStream; import java.io.IOException; public class InputStreamExample { public static void main(String[] args) { FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream("example.txt"); // 读取数据 } catch (IOException e) { e.printStackTrace(); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
关闭Reader
当使用Reader及其子类(如FileReader、BufferedReader等)时,以下是一些关闭输入流的常用方法:
| 方法 | 描述 |
|---|---|
| void close() | 关闭此输入流并释放与之关联的任何系统资源。 |
| void closeQuietly(Reader reader) | 尝试关闭指定的输入流,如果发生异常则不抛出。 |
| void closeQuietly(Reader reader, String message) | 尝试关闭指定的输入流,如果发生异常则记录指定的消息。 |
以下是一个使用FileReader的示例:

import java.io.FileReader; import java.io.IOException; public class ReaderExample { public static void main(String[] args) { FileReader fileReader = null; try { fileReader = new FileReader("example.txt"); // 读取数据 } catch (IOException e) { e.printStackTrace(); } finally { if (fileReader != null) { try { fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
注意事项
- 在关闭输入流时,应该使用trywithresources语句,这样可以在try块执行完毕后自动关闭资源,即使发生异常也是如此。
- 在关闭输入流后,不能再使用该流进行读取操作。
FAQs
Q1: 如果在关闭输入流时发生异常,会发生什么?
A1: 如果在关闭输入流时发生异常,该异常将被捕获并处理,如果异常没有被捕获,它将被传播到调用者。
Q2: 为什么要在finally块中关闭输入流?
A2: 在finally块中关闭输入流确保即使在发生异常的情况下,资源也会被正确释放,这有助于避免资源泄露,并确保程序的健壮性。
