JDK7后的close简洁方式:
1、最简洁 try-with-resources语法糖:不必编写关闭资源的代码,资源也可以得到关闭。(注意变量声明写在小括号中)
public static void main(String[] args) {
try (
FileOutputStream fos = new FileOutputStream("logs/1.log",true);
OutputStreamWriter os = new OutputStreamWriter(fos, "UTF-8");
){
os.write(date+" "+time+" "+i+"\r\n");
}catch (Exception ex) {
ex.printStackTrace();
}
}
2、在一定场景下使用 AutoCloseable接口:只要涉及到资源的关闭,继承了AutoCloseable接口,实现了close()方法,我们都可以调用
public static void main(String[] args) {
OutputStreamWriter os = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream("logs/1.log",true);
os = new OutputStreamWriter(fos, "UTF-8");
os.write(date+" "+time+" "+i+"\r\n");
} catch (Exception e) {
e.printStackTrace();
} finally {
close(os);
close(fos);
}
}
public static void close(AutoCloseable closeable) {
if (closeable != null) {
try {
System.out.println("释放资源!");
closeable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、复杂的原close方式:在finally 中依次判断释放资源
public static void main(String[] args) {
OutputStreamWriter os = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream("logs/1.log",true);
os = new OutputStreamWriter(fos, "UTF-8");
os.write(date+" "+time+" "+i+"\r\n");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}