Jdk 6 7 9ストリームクローズの新しいポーズ

2350 ワード

JDK6
JDK 6の前に、各リソースは手動でコードを書いて閉じる必要があります.

FileInputStream fis = null;
byte[] buffer = new byte[1024];
try {
    fis = new FileInputStream(new File("E:\\Java .txt"));
    while (fis.read(buffer) > 0) {
        System.out.println(new String(buffer));
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JDK7

JDK7 , :try-with-resources 。 java.lang.AutoCloseable(java.io.Closeableはこのインタフェースを した)インタフェースは、プログラムが した に に じられます.
のようにファイルを み むストリームプログラムはJDK 7で きます.


byte[] buffer = new byte[1024];
try (FileInputStream fis = new FileInputStream(new File("E:\\Java .txt"))) {
    while (fis.read(buffer) > 0) {
        System.out.println(new String(buffer));
    }
} catch (Exception e) {
    e.printStackTrace();
}

try()で され、finallyモジュールが されます.
のリソースを に じるtry()では、try()で に されたリソースが に じられる のリソースを できます.
JDK9
JDK 9がリリースされると、try-with-resources の い が されます.try()には がありますが、finalまたはfinalと でなければなりません. のmisのように、mosは としてfinalを しなくてもよいし、 はfinalに しいが、メンバー として するにはfinalで しなければならない.そうしないとコンパイルエラーになる


MyInputStream mis = new MyInputStream();
MyOutputStream mos = new MyOutputStream();
try (mis; mos) {
    mis.read("1.9");
    mos.write("1.9");
} catch (Exception e) {
    e.printStackTrace();
}

Connection dbCon = DriverManager.getConnection("url", "user", "password");
try (dbCon; ResultSet rs = dbCon.createStatement().executeQuery("select * from emp")) {
    while (rs.next()) {
        System.out.println("In loadDataFromDB() =====>>>>>>>>>>>> " + rs.getString(1));
    }
} catch (SQLException e) {
    System.out.println("Exception occurs while reading the data from DB ->" + e.getMessage());
}