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:
| Kurucu | Açı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
| Özellik | FileWriter | FileOutputStream |
|---|---|---|
| Veri Tipi | Karakter (16-bit) | Bayt (8-bit) |
| Kullanım Alanı | Metin dosyaları | Binary dosyalar (görsel, ses vb.) |
| Unicode Desteği | ✔️ | ❌ |
| Performans | BufferedWriter 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)
- Mevcut dosyanın sonuna veri nasıl eklenir?
new FileWriter("dosya.txt", true) şeklinde oluşturun. Bu, append (ekleme) modunu etkinleştirir.
- flush() ile close() farkı nedir?
flush() veriyi diske yazar, close() ise akışı tamamen kapatır.
- FileWriter ile klasör oluşturabilir miyim?
Hayır. Klasör oluşturmak için new File("klasor").mkdirs(); kullanılır.
- 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.