在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块中关闭输入流确保即使在发生异常的情况下,资源也会被正确释放,这有助于避免资源泄露,并确保程序的健壮性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/168363.html