• 在 jdk7及以前:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
InputStreamReader reader = null;
try {
reader = new InputStreamReader(System.in);
reader.read();
} catch (IOException e) {
e.printStackTrace();
}finally {
if( null != reader){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
  • 在 JDK 8 中:

可以在 try 后面的小括号中声明对象的实例化,此对象会提升为final类型,可以不使用 finally显示关闭流,会自动将资源关闭。

1
2
3
4
5
try(InputStreamReader reader = new InputStreamReader(System.in)) {
reader.read();
} catch (IOException e) {
e.printStackTrace();
}
  • 在 JDK9 中:
    可以将reader 声明在 try之前,reader也会自动提升为 final类型。
1
2
3
4
5
6
InputStreamReader reader = new InputStreamReader(System.in);
try(reader) {
reader.read();
} catch (IOException e) {
e.printStackTrace();
}

如果有多个需要关闭的资源,可以将这些资源以英文逗号分隔,如:

1
2
3
4
5
6
7
InputStreamReader reader = new InputStreamReader(System.in);
OutputStreamWriter writer = new OutputStreamWriter(System.out);
try(reader;out) {
reader.read();
} catch (IOException e) {
e.printStackTrace();
}