23 Mayıs 2023 Salı

Reading Large Files Line By Line

Giriş
Kullanılabilecek yöntemler şöyle
1. Files Sınıfı
2. BufferedReader Sınıfı
3. Scanner Sınıfı

Test İçin Büyük Dosya Yaratmak
Şöyle yaparız
public void prepFile() throws IOException {
  BufferedWriter bufferedWriter = Files.newBufferedWriter(Path.of(TARGET_FILE),
    StandardOpenOption.CREATE);
  IntStream.rangeClosed(1,100000000)
    .forEach(a-> write(bufferedWriter, a));
  bufferedWriter.flush();
}

public void write(BufferedWriter bufferedWriter, int a) {
  try {
    bufferedWriter.write(a + "\n");
  } catch (IOException e) {
    ...
    throw new RuntimeException(e);
  }
}
1. Files Sınıfı
Örnek
Şöyle yaparız
Path filePath = Paths.get("C:/temp/file.txt")
 
//try-with-resources
try (Stream<String> lines = Files.lines( filePath )) {
  lines.forEach(...); // Process the line
} catch (IOException e) { ... }
2. BufferedReader Sınıfı
Bu sınıf 2 şekilde kullanılabilir.
1. lines metodu
2. readLine metodu

lines metodu
Aslında bunun yerine Files.lines() çok daha kolay

Örnek
Şöyle yaparız
public void usingBufferedReaderAndLambda() throws IOException {
  try (BufferedReader bufferedReader = Files.newBufferedReader(Path.of(TARGET_FILE))) {
    bufferedReader.lines()
    .forEach(...);  // Process the line
  }
}
readLine metodu
Örnek
Şöyle yaparız
public void usingBufferedReader() throws IOException {
  try(FileReader fileReader = new FileReader(new File(TARGET_FILE))){
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String readLine;
    while((readLine = bufferedReader.readLine())!=null){
      // Process the line
    }
  }
}
3. Scanner Sınıfı
Bir örnek burada


Hiç yorum yok:

Yorum Gönder