代码改变世界

Java IO tips

2011-02-23 16:38  RayLee  阅读(273)  评论(0编辑  收藏  举报

Java IO操作最常犯的错误是忘记关闭所操作的Stream。这些Stream是跟操作系统的资源(如文件,网络)联系在一起的,而操作系统的资源是有限的,如果不能正确释放,会导致其它程序不能正常工作。

是不是所有的Stream都需要调用close()方法释放资源?与文件,网络相关的Stream应该调用close()。byte array streams可以不用。

try {
  OutputStream out = new FileOutputStream("numbers.dat");
  // Write to the stream...
  out.close( );
}
catch (IOException ex) {
  System.err.println(ex);
}
上面代码的问题:如果抛出异常,该文件Stream不会关闭。

利用try-catch-finally解决:

// Initialize this to null to keep the compiler from complaining
// about uninitialized variables
OutputStream out = null;
try {
  out = new FileOutputStream("numbers.dat");
  // Write to the stream...
}
catch (IOException ex) {
  System.err.println(ex);
}
finally {
  if (out != null) {
    try {
      out.close( );
    }
    catch (IOException ex) {
      System.err.println(ex);
    }
  }
}

无论是否抛出异常,该文件Stream都会关闭,系统资源得到释放。

如果你不想处理异常,而打算让调用代码处理。你在定义方法的时候声明抛出IOException。上述代码可以简化为:

// Initialize this to null to keep the compiler from complaining
// about uninitialized variables
OutputStream out == null;
try {
  out = new FileOutputStream("numbers.dat");
  // Write to the stream...
}
finally {
  if (out != null) out.close( );
}