Java try-with-resources構文のサンプル

Javaのtry-with-resources構文のサンプルです。

try-with-resources構文

  • tryの後ろのかっこでリソースを宣言します
  • tryのブロックを抜けるときにリソースがcloseされます
    ※「{」(波括弧) から「}」までをブロックといいます
    →従来はfinally句でリソースをcloseしていました
    →finally句でのリソースをcloseする記述が不要になります
  • リソースのスコープはtryブロック配下のみです
  • リソースが複数ある場合はセミコロンで区切ります
  • リソースのclose処理中に発生した例外は無視されます
  • リソースのcloseの順番は定義の逆の順番です
    →サンプルのコードではwriter、readerの順番でcloseされます
  • この構文はAutoCloseableインターフェースを実装したクラスのみが使用できます
  • この構文は JavaSE7で追加されました
  • 以下はJava8 API仕様のAutoCloseableインターフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/AutoCloseable.html

コード

try-with-resourcesのサンプルです。
17,18行目でtry-with-resources構文を使用しています。

package test1;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
/**
 * try-with-resources文
 */
class Sample1 {
	void runSample() {
 
		String dir = "D:\\workspace123abc";
		String filename1 = "\\test1.png";
		String filename2 = "\\test2.png";

		// try-with-resources構文
		try (FileInputStream reader = new FileInputStream(dir + filename1);
		FileOutputStream writer = new FileOutputStream(dir + filename2)){
				
			int data;
			while ((data = reader.read()) != -1) {
				writer.write(data);
			}
		} catch (IOException e) {
			e.printStackTrace();

		//finally句でのリソースのcloseは不要
//		}finally{
//			try{
//				if (reader!=null){
//					reader.close();
//				}
//				if (writer!=null){
//					writer.close();
//				}
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
		}
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample1 s1 = new Sample1();
		s1.runSample(); 
	}
}

関連の記事

Java 検査例外のサンプル
Java 非検査例外のサンプル
Java 例外処理のthrowのサンプル
Java 独自の例外を作成するサンプル
Java printStackTraceとは




△上に戻る