You are hereDosyadaki Sayıları Toplama
Dosyadaki Sayıları Toplama
Diyelim ki bir dosya içinde her bir satırda sayılar yer alıyor. Bu sayıların toplamını öğrenmek istiyoruz. Java'da bunu yapan program nasıl olur?
- Önce sınıfımızı oluşturalım.
- Uzun uzun yeni metodlarla uğraşmadan, çalıştırılabilir
mainmetodumuzu oluşturalım. - Kodlarımızı main metodu içine yazmaya başlayalım. Bir dosyadan okuyacağımıza göre bir dosyaya (
File); bu dosyayı okuyacak olan bir okuyucuya (FileReader); bir de okunan değeri satır satır alabilmek için tampona (BufferedReader) ihityacımız var. hemen onları tanımlayalım. - Tabii ki bu değişken tipleri Java'nın çekirdek kütüphanesinde bulunmuyor. O yüzden bu değişken tiplerini barındıran kütüphane olan
java.io'yu, tüm sınıflarıyla ithal etmemiz lazım. İthal dediysem import yani :) Bunu da ta sınıfın en başında yapmamız gerekiyor. - Bundan sonra dosyadan veri alışverişi yapılacağını göz önünde bulundurarak bu dosyanın her zaman orda olacağını garanti edemeyeceğimizi biliyoruz. Dolayısıyla da bu dosya alışverişini bir try-catch içinde belitrmemiz lazım.
- Şimdi de
tryiçine dosyamızı, okuyucumuzu ve tamponumuzu döşeyelim. - Burada dosyamızı, java dosyamızla aynı klasörde olduğunu ve adının dosya.txt olduğunu varsayarak verdik. Yani göreli yol (relative path) vermiş olduk. Eğer mutlak yol (absolute path ya da full path) vermek istersek de şu şekilde yazabiliriz:
- Ters bölü (ters slash - slaş(?)) yani "\" işareti Java için bir kaçış karakteri olduğu için, tırnak işaretleri arasında bunun normal bir \ işareti olduğunu Java'ya söylememiz gerekiyor. Bunun için de onu anlatan kaçış karakterini yani iki ters bölüyü yazıyoruz. \\ şeklinde. Bundan sonra da toplam sayıyı tutması için bir değişken tanımlayabliriz. Eğer dosya içindeki satırlar sadece tam sayılardan oluşuyorsa buna
intya da çok fazla satır varsalongdeğer verebiliriz. Ama içinde ondalıklı değerler de varsa toplam değişkenimizidoubleyapmamız gerekiyor. Biz örnek içindoublediyelim. - Bu dosyadaki verileri satır satır okutacağımız için, tampon adlı değişkenimizin
readLine()metodunu kullanacağız. Burdan gelen değer birStringolacaktır. Bunu dadoubledeğere döndürmemiz gerekir ki toplayabilelim. Bu dönüşümü Java'nınDoublesınıfındakiparseDouble()metodunu kullanarak yapalım. Dönüşüm sonucunda aldığımız değeri de sayi adlidoubledeğişken tanımlayıp ona atayalım. - Bu işlemi her satır için yapacağız. bu yüzden bir döngü içine koymamız gerekiyor. Döngünün ne kadar süreceği, dosyadaki satır sayısına bağlı oalrak değişiyor. Satır sayısını bilerek buna göre bir for döngüsü yazılabilir ama dosyanın satır sayısının bilinmediğini ya da değiştiğini düşünelim. Bu şekilde yapıya biraz daha modülerlik kazandıralım. Bunu da BufferedReader sınıfının
ready()metodunu kullanarak sağlayabiliriz. Eğer tampon adlıBuffredReadernesnemiz dosyayı okurken önünde bir satır varsa, bu satırı okusun. satır bittiyse döngüden çıksın istiyoruz. Bu metot bize birbooleandeğer döndürecek. Yani okunacak bir satır varsatrue, yoksafalsedeğeri döner. Bunu da birwhiledöngüsüne koyalım. - İşlem satır için bitince satırdan aldığı değeri toplam değişkenine eklemesi lazım.
- En son olarak da döngüden çıkınca toplamı ekrana bastıralım.
- Bütün bunları bir try-catch kalıbına koyduğumuzu söylemiştik. catch bloğuna da istisna (Exception) olursa hatanın izini (StackTrace) göstermesi için
e.printStackTrace()kodunu yazarsak güzel olur.
public class DosyadanTopla { }
public static void main(String[] args) { }
File dosya;
FileReader okuyucu;
BufferedReader tampon;
import java.io.*;
try { } catch (Exception e) { }
dosya = new File("dosya.txt");
okuyucu = new FileReader(dosya);
tampon = new BufferedReader(okuyucu);
dosya = new File("c:\\dosya.txt");
double toplam = 0;
double sayi = Double.parseDouble(girdi.readLine());
while (tampon.ready()) {
double sayi = Double.parseDouble(girdi.readLine());
}
toplam += sayi;
System.out.println(toplam);
Kodun hepsini tümden görelim;
package org.hosaf.code;
import java.io.*;
public class DosyadanTopla {
public static void main(String[] args) {
File dosya;
FileReader okuyucu;
BufferedReader tampon;
try {
dosya = new File("dosya.txt");
okuyucu = new FileReader(dosya);
tampon = new BufferedReader(okuyucu);
double toplam = 0;
while (tampon.ready()) {
double sayi = Double.parseDouble(girdi.readLine());
toplam += sayi;
}
System.out.println(toplam);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Blog
Musiki
Bu konuda ben de fikrimi paylaşmak istiyorum