CodeBlanks Logo Icon CodeBlanks

try-with-resources

try-with-resources ile otomatik kapatmayı öğrenirsin.

try-with-resources

Java 7 ile gelen try-with-resources, dosya gibi kaynakları otomatik kapatır. Kaynak try bloğunun başında tanımlanır; blok bitince Java otomatik olarak close() çağırır. BufferedReader r = new BufferedReader(...) kaynağı try parantezi içine yazılır.

Bu yapı, close() çağrısını unutma hatasını ortadan kaldırır. Kaynak AutoCloseable arayüzünü uygulamalıdır; Java'nın I/O sınıflarının çoğu uygular. Birden fazla kaynak noktalı virgülle ayrılır.

AutoCloseable arayüzü

Bir sınıfın try-with-resources'ta kullanılabilmesi için AutoCloseable arayüzünü uygulaması gerekir. Bu arayüz tek bir metot içerir: void close() throws Exception. Kendi kaynak sınıflarını yazarken bu arayüzü uygulayıp close'uoverride edersin.

Eğer try bloğunda bir istisna fırlarsa ve close da istisna fırlatırsa, close istisnası suppressed (bastırılmış) olarak ana istisnaya eklenir; kaybolmaz. Throwable.getSuppressed() ile erişilir.

Uygulama try-with-resources ile dosya oku

import java.io.BufferedReader; ve import java.io.FileReader; ve import java.io.FileWriter; ve import java.io.IOException; içe aktar. main içine throws IOException ekle. Önce dosyaya yaz: new FileWriter("k.txt").write("Satır"); — bu kapanmaz ama burada sorun değil. Asıl görev: try (BufferedReader r = new BufferedReader(new FileReader("k.txt"))) bloğu içinde System.out.println(r.readLine()); yaz. close çağrısı yapma; try-with-resources halleder.

Başlangıç kodu

Main.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        // Önce dosyaya bir satır yaz (FileWriter ile)

        // try-with-resources ile BufferedReader aç ve readLine yazdır

    }
}

Örnek çözüm

Main.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("k.txt");
        fw.write("Satır");
        fw.close();
        try (BufferedReader r = new BufferedReader(new FileReader("k.txt"))) {
            System.out.println(r.readLine());
        }
    }
}

Beklenen çıktı

Satır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 try-with-resources başlangıcını tamamla

Soru
try (BufferedReader r = new BufferedReader(new FileReader("a.txt"____)) {
    System.out.println(r.readLine());
}
Cevap
try (BufferedReader r = new BufferedReader(new FileReader("a.txt"))) {
    System.out.println(r.readLine());
}

Açıklama: İki kapanış parantezi FileReader ve BufferedReader'ı kapatır.

2 try-with-resources neyi garanti eder?

  • Kaynağın hiç acilmamasını
  • İstisnanın hiç fırlamamasını
  • Dosyanın otomatik silinmesini
  • Kaynağın otomatik kapatılmasını Doğru cevap

Açıklama: try-with-resources blok sonunda close'u otomatik çağırır.

3 try-with-resources kavramlarını eşleştir

Kavram Anlamı
AutoCloseable Kaynak için gereken arayüz
close() Otomatik çağrılan metot
suppressed close'tan gelen bastırılmış istisna
try (...) Kaynak bildirimi

Orta seviye bölümündeki tüm dersler