InputStream Nasıl Kullanılır?

Android Studio ile uygulama içinde kayıtlı dosyaya erişip TextView’a yazdıracağız.

Uygulama içinden erişeceğimiz dosyalar için, app klasörü içinde assets isimli bir klasör açıyor ve dosyalarımızı bu klasöre ekliyoruz. Bu örnekteki dosya, taklit yazı bloğu içeren .txt formatındaki okunacakDosya.txt dosyasıdır. (Kendiniz uygulamanıza istediğiniz dosyayı ekleyebilirsiniz. *.json , *.txt)

assets dosyası oluşturma

Dosya okuma işleminde dosyadaki metni satır satır okuyarak bir String elde edeceğiz. Ancak bildiğimiz gibi Stringler değiştirilemez(immutable) özelliğine sahiptirler.

Dolayısıyla satır satır okuyacağımız metinleri String sınıfından manipule edemeceyeceğimiz için StrinBuilder sınıfını kullanacağız. StringBuilder sınıfından yaratmış olduğumuz nesnenin append metoduyla, aynı nesnenin ucuna String’i ekleyebiliriz. Bu nedenle standart String sınıfına göre daha etkindir.

MainActivity.java kodlarının tamamı :

Bir kaynaktan gelecek bilgileri okuyabilmek için bilgi girişi sağlayan InputStream tanımlayabiliriz. InputStream değişkeninin başta sadece beyanını (deklarasyonunu) yaparız.


InputStream nesnesinin ataması (değer alması) bir try bloğunun içinde denenecektir. Beyanı try’dan önce yapmamızın nedeni sonuçta finally bloğu içinde InputStream nesnesinin tanınmasını sağlamaktır.

Aksi takdirde(beyanını try içinde yapsaydık) sadece try bloğu içinde tanınan lokal bir değişken olurdu ve finally bloğu içinde tanınmazdı.

finally bloğunda, InputStream nesnesinin try bloğu içerisinde oluşturulup oluşturulamadığını kontrol ederiz. Eğer başlangıçtaki gibi null değil ise oluşturulmuş demektir ve kaynak israfını önlemek için kapatmamız gerekir. (Bu kapatma işlemi başarısız olma durumu dikkate alınarak otomatik olarak bir try-catch içine alınmaktadır. )


Giriş (bilgi) akışını (InputStream) elde edebilmek için getAssets() metodu ile assets klasörüne erişir ve zincirleme metot çağırma ile open() metodunu çağırabiliriz. Bu metot parametre olarak açacağımız dosya adını beklemektedir.

Giriş akışını(InputStream nesnesi) elde ettikten sonra bu akışı okuyabilmek için giriş akış okuyucusuna (InputStreamReader nesnesi) ihtiyaç duyarız. Bu okuyucu nesnesini oluştururken bizden, parametre olarak okunacak InputStream nesnesini beklemektedir.

Bir InputStreamReader, byte akışlarından karakter akışlarına bir köprüdür: Byte okur ve bunları belirtilen bir karakter standardını kullanarak karakterleri temsil eden tam sayılara dönüştürür.

InputStreamReader nesnesini kullanarak bir BufferedReader nesnesi oluşturabiliriz. BufferedReader, InputStreamReader’dan gelen karakter giriş akışını okur, karakterleri, dizileri ve satırları etkin şekilde okumak için karakterleri arabelleğe alır.

Artık BufferedReader’dan metni satır satır okuyabiliriz.


Birinci satırda metni satır satır okuyacağımız için satir isminde bir String değişkeni tanımlayıp, BufferedReader’dan ilk satırı okuyalım.

İkinci satirda değişken null değil ise, okuduğumuz satırı üçüncü satırdaki sb’ye(StringBuilder nesnesine) ekleyelim.

Dördüncü satırda bir sonraki satırı okuyalım ve okuduğumuz değeri satir değişkenine atayalım.

Bundan sonra 2 ve 3. adımları tekrarlamaya devam edeceğiz. Eğer satir (okunan ve satira atana değer) null ise, artık sb’ye eklenecek yeni satır olmadığı, anlamına gelir. Dolayısıyla artık while döngüsünden çıkılacaktır.


Son olarak XML dosyasını da aşağıda görüldüğü gibi değiştirelim.

NOT : Okuyacağınız dosya içerisindeki metin(karakter sayısı) çok fazlaysa, aktivite yüklenemeyecek ve emulator beyaz ekran verecektir. Dolayısıyla fazla metin içeriği olan dosyalar kullanılmamaya çalışılmalıdır. Eğer dosyaya müdahale edilemiyorsa da yazdırılacak metin parse edilmelidir.

Örn :

şeklinde string metot kullanılır. Bu işlem sb nesnesinin ilk 5000 karakterini parse edip textView nesnesine yazdıracaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir