Skip to main content

Java ile Dosya Okuma: En Verimli Yöntemler ve Örnek Kodlar

Java, dosya okuma işlemleri için güçlü araçlar sunar.
Bu rehberde BufferedReader, Scanner, Files.readAllLines() ve FileChannel gibi sınıflarla dosyaları satır satır, yüksek performanslı ve farklı kodlamalarda nasıl okuyabileceğinizi öğreneceksiniz.


🎯 Bu Rehberde Ne Öğreneceksiniz?

  • Java’da bir dosyayı okumanın dört farklı yöntemi
  • UTF-8 ve UTF-16 gibi farklı karakter kodlamalarını yönetme
  • GB boyutunda büyük dosyaları performanslı biçimde işleme
  • FileReader ve BufferedReader farkları
  • try-with-resources ile hata yönetimi

💻 1. BufferedReader ile Satır Satır Dosya Okuma (En Verimli Yöntem)

BufferedReader, dosyayı tamponlayarak okuduğu için performanslıdır.
readLine() metodu, dosya sonuna gelindiğinde null döndürür.

📄 Örnek Kod:

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

public class ReadFileWithBufferedReader {
public static void main(String[] args) {
try (BufferedReader okuyucu = new BufferedReader(new FileReader("deneme.txt"))) {
String satir;
while ((satir = okuyucu.readLine()) != null) {
System.out.println(satir);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

💬 Bu kod, deneme.txt dosyasını satır satır okuyarak ekrana yazdırır.


📘 2. Scanner ile Dosya Okuma

Scanner sınıfı, basit dosya okuma işlemleri için idealdir. hasNextLine() metodu, dosya sonuna kadar satır satır ilerler.

📄 Örnek Kod:


import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadFileWithScanner {
public static void main(String[] args) {
try (Scanner tarayici = new Scanner(new File("deneme.txt"))) {
while (tarayici.hasNextLine()) {
System.out.println(tarayici.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

💬 Scanner, küçük dosyalarda pratik ve okunaklı bir çözüm sunar.


📄 3. Files.readAllLines() ile Tüm Satırları Liste Olarak Okuma

Files.readAllLines() metodu, dosyadaki tüm satırları bir List<String> içine alır. Küçük dosyalar için uygundur.

📄 Örnek Kod:


import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ReadFileWithFilesClass {
public static void main(String[] args) {
try {
List<String> satirlar = Files.readAllLines(Paths.get("deneme.txt"));
satirlar.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}

💬 Tüm dosya satırlarını bir listeye alarak kolayca işleyebilirsiniz.


📚 4. RandomAccessFile ile Okuma

RandomAccessFile, dosyayı hem okuma hem yazma modunda açabilir. “r” parametresi sadece okuma için kullanılır.

📄 Örnek Kod:


import java.io.IOException;
import java.io.RandomAccessFile;

public class ReadFileWithRandomAccessFile {
public static void main(String[] args) {
try (RandomAccessFile dosya = new RandomAccessFile("deneme.txt", "r")) {
String str;
while ((str = dosya.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

💬 Bu yöntem, dosyanın belirli bir kısmından okumaya başlamak için idealdir.


🌐 Karakter Kodlama (Encoding) Yönetimi

Dosyanız UTF-8 dışında bir kodlamadaysa, doğru karakter setini belirtmelisiniz.

UTF-8 ile Okuma


import java.nio.charset.StandardCharsets;
import java.nio.file.*;

public class ReadUTF8File {
public static void main(String[] args) {
try {
String icerik = Files.readString(Path.of("ornek.txt"), StandardCharsets.UTF_8);
System.out.println(icerik);
} catch (IOException e) {
e.printStackTrace();
}
}
}

💬 UTF-8, Türkçe karakterleri sorunsuz işler.

UTF-16 ile Okuma


import java.nio.charset.Charset;
import java.nio.file.*;

public class ReadUTF16File {
public static void main(String[] args) {
try {
String icerik = Files.readString(Path.of("ornek.txt"), Charset.forName("UTF-16"));
System.out.println(icerik);
} catch (IOException e) {
e.printStackTrace();
}
}
}

💬 UTF-16, Unicode destekli sistemlerde yaygın kullanılır.


⚡ Büyük Dosyalar için NIO ve FileChannel Kullanımı

GB seviyesindeki log veya veri dosyalarında FileChannel, yüksek performans sağlar. Belleği aşırı doldurmadan dosya içeriğini parça parça işler.

📄 Örnek Kod:


import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.*;

public class FileChannelExample {
public static void main(String[] args) {
try (FileChannel kanal = FileChannel.open(Path.of("buyukveri.log"), StandardOpenOption.READ)) {
ByteBuffer tampon = ByteBuffer.allocate(4096);
while (kanal.read(tampon) > 0) {
tampon.flip();
System.out.print(new String(tampon.array(), 0, tampon.limit()));
tampon.clear();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

💬 FileChannel, büyük dosyaları küçük tamponlarla işleyerek performansı artırır.


❓ Sıkça Sorulan Sorular (SSS)

  1. Dosya okumak için en verimli yöntem hangisidir?

Büyük dosyalar için BufferedReader veya FileChannel önerilir.

  1. FileReader ve BufferedReader farkı nedir?

FileReader karakter karakter okur, BufferedReader ise tamponlayarak çok daha hızlı çalışır.

  1. Dosya bulunamadı hatası nasıl çözülür?

Dosya yolunun doğru olduğundan emin olun, izinleri kontrol edin ve try-with-resources yapısını kullanın.

  1. Büyük dosyaları belleğe yüklemeden okumak mümkün mü?

Evet, FileChannel veya BufferedReader.lines() akış yöntemleri kullanılabilir.

  1. Türkçe karakterler bozuk çıkıyorsa ne yapılmalı?

Dosya UTF-8 kodlamasında değilse, Charset.forName("ISO-8859-9") gibi uygun karakter seti seçin.


🔚 Sonuç

Bu rehberde Java’da dosya okuma yöntemlerini ayrıntılı olarak öğrendiniz. Farklı sınıflar, karakter kodlamaları ve performans teknikleriyle artık her boyuttaki dosyayı rahatlıkla okuyabilirsiniz.

💡 Dosya işlemlerinde performans, hata yönetimi ve kodlama seçimi her zaman kritik öneme sahiptir. Rabisu Bulut platformunda Java uygulamalarınızı hemen deneyebilir ve bulut tabanlı test ortamınızı oluşturabilirsiniz. 🚀