Mobil Programlama

Android

DERS PROGRAMI
Android 101 Ders Programı

Java'da Dosya İşlemleri

Lisans: Creative Commons 11.12.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Bu bölümde sizlere Java'da bir dosyaya veri yazmayı ve ardından okumayı göstereceğiz. İlk örneğimizde bir string değişkeni içerisinde saklanan veriyi disk üzerinde bir .txt (metin) dosyasına yazmayı anlatacağız.



        String str = "Bunu dosyaya yazdir";

        File file = new File("dosya.txt");
        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fileWriter = new FileWriter(file, false);
        BufferedWriter bWriter = new BufferedWriter(fileWriter);
        bWriter.write(str);
        bWriter.close();

Java'da disk üzerindeki dosyalar ve klasörlerle iletişim sağlamak için File sınıfından faydalanırız. File sınıfı disk üzerinde belirtilen konumdaki bir dosya ya da klasörü kod içerisinden tanımlamak için kullanılır. Yukarıdaki kod parçasına bakarsak File sınıfının yapıcısı (Constructor) içerisinde dosyanın adı dosya.txt olarak belirtilmiş. Bu şekilde disk üzerinde dosya.txt adında bir dosyaya işlem yapmak için o dosyayı bir değişkene atamış oluyoruz. exists metodu dosyanın disk üzerinde önceden var olduğunu kontrol etmek için kullanılıyor. Eğer dosya diskte henüz yoksa createNewFile ile diskte dosya.txt adında bir dosya oluşturuyoruz.

Dosyaya metin yazma işlemini başlatmak için FileWriter sınıfından faydalanırız. FileWriter sınıfı File tipindeki bir değişkeni yazma amacıyla kullanmaya yarar. Yapıcı içerisinde yer alan boolean tipindeki değer dosyanın append modunda yazılmasını sağlar. append modu dosyanın içerisinde yer alan mevcut metinlere dokunmadan dosyanın son karakterinden itibaren yazma işlemini başlatacaktır. Yukarıdaki kod içerisinde bu değer false olduğundan dosya.txt her seferinde baştan yazılacaktır.

BufferedWriter sınıfı ise dosyaya bir kayıt yazarken bize ayarlanabilir bir tampon bellek (Buffer) sunacaktır. Bu işlem olmadan yazma işlemi yapılması karakterlerin anında byte'a dönüştürülüp dosyaya yazılmasına yol açacak ve programın verimsiz çalışmasına yol açacaktır (Bkz: Buradaki belge).

write metodu yazma işlemini başlatır. Dosyaya yazma işlemimiz tamamlandıktan sonra close komutuyla dosya ile olan işlemi tamamlarız ve diskte metin dosyamız oluşur.

dosya.txt metin dosyasının projedeki yeri

Dosyayı okumak içinse aşağıdaki kodu kullanırız:



FileReader fileReader = new FileReader(file);
String line;

BufferedReader br = new BufferedReader(fileReader);

while ((line = br.readLine()) != null) {

    System.out.println(line);

}

br.close();

Buradaki file değişkeni bir önceki örnekte oluşturulan File sınıfındaki değişkendir ve dosya.txt adındaki dosyamızı belirtir. Burada dosyayı okuma amacıyla FileReader adındaki sınıfı kullanmamız gerekir. Daha önceki örnekte olduğu gibi BufferedReader yardımıyla dosyamızı okumaya başlarız. Dosya içerisindeki her satır line adındaki bir değişkene atılır ve dosyanın sonuna gelene kadar bütün satırlar konsola yazdırılır (line != null). İşlem bitirildikten sonra BufferedReader close metoduyla kapatılır.

 

NOT: BufferedReader bize yüksek bir tampon bellek sağlar. BufferedReader kullanılmazsa read metodu her çağırıldığında dosyadan byte'lar çekilir, karakterlere dönüştürülür ve döndürülür. Bu da programın performansının düşmesine yol açar. (Bkz: Buradaki kılavuz belge)

Eğer bir resmi ya da İnternet üzerinden çektiğimiz bir dosyayı diske kayıt etmek istiyorsak, metin dosyası yerine binary dosya kullanmamız gerekir. Java bu amaçla aşağıdaki sınıfları sunmaktadır:



byte[] data = {0x01, 0x02};

File binaryFile = new File("binary.dat");
FileOutputStream fos = new FileOutputStream(binaryFile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(data);
bos.close();

FileOutputStream binary bir dosyaya byte tipinde bir değişken yazmak için kullanılır. Yukarıdaki örnekte data değişkenindeki byte değerleri binary.dat adında bir dosyaya yazılmak için hazırlanmıştır. BufferedOutputStream ise binary dosyaya yazma işlemi sırasında bize tampon bellek sağlar. write komutuyla yazma işlemi tamamlandıktan sonra close metodu ile akış (stream) kapatılmalıdır.

Dosyayı okumak içinse aşağıdaki koddan faydalanırız:

data = new byte[(int) binaryFile.length()];
FileInputStream fis = new FileInputStream(binaryFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(data, 0, data.length);
bis.close();

Yukarıda öncelikle dosyanın içeriğini alabileceğimiz bir byte dizisi oluşturuyoruz. Bu dizi binary dosya için dosyanın boyutu kadardır ve File sınıfında bulunan length metoduyla öğrenilebilir. Ardından oluşturulan FileInputStream akışı ile dosyaya erişim sağlanır ve BufferedInputStream yardımıyla dosya okunarak içerisindeki bütün byte değerleri data değişkenine aktarılır. Bu noktadan sonra dosyanın tüm içeriği data dizisi içinde yer alır. close metodu akışı kapatmak için kullanılır.

Android uygulamalarında SD kart üzerine veri yazmak ya da uzaktaki bir kaynaktan alınan resimleri saklamak için bu metodları sıklıkla kullanacağız.