public static String readFile(String name) throws FileNotFoundException {
StringBuilder builder = new StringBuilder();
Scanner scanner = null;
try {
scanner = new Scanner(new FileInputStream(name));
while (scanner.hasNext()) {
builder.append(scanner.nextLine());
builder.append('\n');
}
} catch(FileNotFoundException ex) {
ex.printStackTrace();
throw ex;
} finally {
if(scanner != null) {
scanner.close();
}
}
return builder.toString();
}
在SE7後,只要有實作java.lang.AutoCloseable Inteface就可以使用以下寫法:
public static String readFile(String name) throws FileNotFoundException {
StringBuilder builder = new StringBuilder();
try(Scanner scanner = new Scanner(new FileInputStream(name))) {
while (scanner.hasNext()) {
builder.append(scanner.nextLine());
builder.append('\n');
}
} catch(FileNotFoundException ex) {
ex.printStackTrace();
throw ex;
}
return builder.toString();
}
不管是否是正常執行還是異常中斷,java都會呼叫介面所定義的close方法。try裡面也可以使用多個物件,以分號區隔,越後面的物件會越早被關閉資源。
以下為java.lang.AutoCloseable Inteface所需實作的規範
http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html
上述範例中的Scanner在SE 7也是有實作java.lang.AutoCloseable Inteface
http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
轉貼請註明出處,最好直接使用聯結轉貼!Thanks~
作者: Samuel
日期:2012/10/06
沒有留言:
張貼留言