Skip to main content

Java FileWriter Rehberi: Dosyaya Karakter Yazma Örnekleri 📝

📘 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, Java’nın java.io paketindeki FileWriter sınıfını kullanarak karakter tabanlı veri yazmayı öğreneceksiniz.
Farklı write() metotlarını, try-with-resources yapısını, flush() ve close() farklarını ve performans artırıcı ipuçlarını adım adım göreceksiniz.


⚙️ FileWriter Nedir?

FileWriter, OutputStreamWriter sınıfının bir alt sınıfıdır ve metin (Unicode karakter) yazmak için kullanılır.
Ham bayt yerine 16-bit karakterlerle çalışır. Bu sayede Türkçe dahil tüm dilleri destekler.

💡 İpucu:
Daha yüksek performans için FileWriter’ı BufferedWriter ile sarmalayabilirsiniz:

BufferedWriter writer = new BufferedWriter(new FileWriter("tr1-veri/log.txt"));

🧩 Adım 1: FileWriter Nesnesi Oluşturma

FileWriter nesnesi çeşitli kurucular (constructor) üzerinden oluşturulabilir:

KurucuAçıklama
FileWriter(String dosyaAdi)Yeni dosya oluşturur, varsa üzerine yazar.
FileWriter(String dosyaAdi, boolean ekle)Dosya sonuna ekleme (append) yapar.
FileWriter(File dosya)File nesnesi üzerinden oluşturur.

🧩 Adım 2: Try-with-Resources ile Güvenli Yazma

FileWriter, AutoCloseable arayüzünü uyguladığı için try-with-resources yapısında otomatik kapanır. Bu yöntem, kaynak sızıntılarını önler.


import java.io.FileWriter;

public class TekKarakterYazma {
public static void main(String[] args) {
try (FileWriter dosyaYazici = new FileWriter("tr1-veri/log.txt")) {
dosyaYazici.write(65); // 'A'
dosyaYazici.write(66); // 'B'
dosyaYazici.write(67); // 'C'
} catch (Exception e) {
e.printStackTrace();
}
}
}

💬 Çıktı: ABC


🧩 Adım 3: Dize ve Dizi Yazma Yöntemleri

🔹 Tüm Dizeyi Yazma (write(String str))


try (FileWriter dosyaYazici = new FileWriter("tr1-veri/log.txt")) {
dosyaYazici.write("Rabisu Bulut Teknoloji");
}

💬 Çıktı: Rabisu Bulut Teknoloji

🔹 Dize Parçası Yazma (write(String str, int off, int len))


String veri = "Bu bir FileWriter Uygulamasıdır.";
try (FileWriter dosyaYazici = new FileWriter("tr1-veri/log.txt")) {
dosyaYazici.write(veri, 8, 10);
}

💬 Çıktı: FileWriter


🧩 Adım 4: flush() ve close() Kullanımı


try (FileWriter dosyaYazici = new FileWriter("tr1-veri/log.txt")) {
dosyaYazici.write("İşlem Başladı");
dosyaYazici.flush(); // Veriyi hemen diske yazar
dosyaYazici.write(" - İşlem Tamamlandı");
}

💬 Açıklama: flush() tampondaki veriyi zorla diske aktarır. close() metodu çağrıldığında flush() otomatik olarak çalışır, ardından akışı kapatır.


⚔️ FileWriter vs FileOutputStream

ÖzellikFileWriterFileOutputStream
Veri TipiKarakter (16-bit)Bayt (8-bit)
Kullanım AlanıMetin dosyalarıBinary dosyalar (görsel, ses vb.)
Unicode Desteği✔️
PerformansBufferedWriter ile daha hızlıHam yazma için optimize

💡 Performans İpucu Büyük dosyalarla çalışırken BufferedWriter kullanmak yazma işlemini hızlandırır:


BufferedWriter bw = new BufferedWriter(new FileWriter("tr1-veri/log.txt"));
bw.write("Rabisu Cloud Test Logu");
bw.close();

❓ Sıkça Sorulan Sorular (SSS)

  1. Mevcut dosyanın sonuna veri nasıl eklenir?

new FileWriter("dosya.txt", true) şeklinde oluşturun. Bu, append (ekleme) modunu etkinleştirir.

  1. flush() ile close() farkı nedir?

flush() veriyi diske yazar, close() ise akışı tamamen kapatır.

  1. FileWriter ile klasör oluşturabilir miyim?

Hayır. Klasör oluşturmak için new File("klasor").mkdirs(); kullanılır.

  1. BufferedWriter kullanmak neden daha hızlıdır?

Çünkü veriyi bellekte biriktirip topluca diske yazar, I/O işlemlerini azaltır.


🎯 Sonuç

Artık Java’da FileWriter sınıfını kullanarak karakter tabanlı veri yazmayı biliyorsun. Kodlarını güvenli, hızlı ve düzenli hale getirmek için try-with-resources ve BufferedWriter gibi araçları kullanabilirsin.

☁️ Geliştirdiğin dosya işlemlerini Rabisu Bulut üzerinde test ederek performans farkını kendin deneyebilirsin.