crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Java IO: Dosyalarla Kalıcı Veri Yönetimi
1. File Sınıfı: Dosya ve Dizini Tanımak
File sınıfı, dosyanın kendisini değil, dosyanın yolunu (path) temsil eder. Bir dosyanın var olup olmadığını kontrol etmek, yeni dosya oluşturmak veya silmek için kullanılır.
Java:
File dosya = new File("notlar.txt");
if (dosya.exists()) {
System.out.println("Dosya zaten var.");
} else {
dosya.createNewFile(); // Yeni boş dosya oluşturur
System.out.println("Dosya oluşturuldu.");
}
2. FileWriter: Dosyaya Veri Yazmak
Dosyaya karakter tabanlı veri yazmak için kullanılır. Varsayılan olarak dosyayı her açtığında içini siler ve baştan yazar. Eğer mevcut verinin sonuna ekleme yapmak istiyorsanız, ikinci parametreyi true yapmalısınız.
Java:
try (FileWriter writer = new FileWriter("notlar.txt", true)) {
writer.write("Merhaba Java!\n");
writer.write("Dosya işlemleri çok kolay.");
} catch (IOException e) {
e.printStackTrace();
}
İpucu: try-with-resources yapısını kullanmak (parantez içinde tanımlama), dosyanın işlem bitince otomatik olarak kapatılmasını sağlar.
3. FileReader: Dosyadan Veri Okumak
FileReader, dosyayı karakter karakter okur. Ancak bu yöntem büyük dosyalar için yavaştır. Genellikle performans için BufferedReader ile birlikte kullanılır.
Java:
try (FileReader reader = new FileReader("notlar.txt")) {
int karakter;
while ((karakter = reader.read()) != -1) {
System.out.print((char) karakter);
}
} catch (IOException e) {
e.printStackTrace();
}
4. Performansın Sırrı: BufferedReader ve BufferedWriter
Doğrudan diskten karakter karakter okumak yerine, verileri bir tampon (buffer) belleğe alıp satır satır okumak çok daha hızlıdır.
| Sınıf | Avantajı |
|---|---|
| BufferedWriter | newLine() metodu ile kolayca alt satıra geçer ve yazma hızını artırır. |
| BufferedReader | readLine() metodu ile dosyayı satır satır okumanızı sağlar. |
Java:
// Satır satır okuma örneği
try (BufferedReader br = new BufferedReader(new FileReader("notlar.txt"))) {
String satir;
while ((satir = br.readLine()) != null) {
System.out.println(satir);
}
} catch (IOException e) {
e.printStackTrace();
}
5. Java NIO: Modern ve Daha Hızlı Yaklaşım (Java 7+)
Eğer küçük bir dosyanın tüm içeriğini tek seferde okumak veya yazmak istiyorsanız, Java NIO (java.nio.file.Files) çok daha pratik metotlar sunar:
Java:
Path yol = Paths.get("notlar.txt");
// Tümünü oku
List<String> satirlar = Files.readAllLines(yol);
// Tümünü yaz
Files.write(yol, "Tek satırda yazdım".getBytes());
Sonuç
Java'da dosya işlemleri karakter akışları (Reader/Writer) ve bayt akışları (InputStream/OutputStream) olarak ikiye ayrılır. Metin dosyalarıyla çalışırken her zaman Reader/Writer ailesini ve hız için Buffered katmanını tercih etmelisiniz.