Android İşletim Sisteminde Dosya Yönetimi :MobileCoder I MobileCoder.NET I Mobil Programlama I Android Programlama I Mobil Geliştiricilerin Buluşma Noktası I www.MobileCoder.Net

Android İşletim Sisteminde Dosya Yönetimi

06.04.2015 tarihinde Android Programlama kategorisine eklenmiş, 496 views Kişi Okumuş ve 0 Yorum Yapılmış.

 

Bu bölümde arayüzden biraz uzaklaşarak dosya yönetimi kavramlarına değineceğiz. Uygulamanızın ihtiyaç duyacağı verileri farklı yollardan nasıl kaydedebileceğinizi ve ihtiyaç duyduğunuzda tekrar okuyabileceğinizi bu bölümde bulabilirsiniz.

Her Android cihazının iki dosya depolama alanı vardır: “dâhili” ve “harici”. Bu isimler Android’in ilk günlerinden, çoğu cihazın yerleşik olarak gelen kalıcı hafızasından (dahili) ve buna ek olarak çıkarılabilir mikro SD kart (harici) gibi depolama alanlarından geliyor.

 

İç Sistem Belleği (Dahili)

Bu belleğe kaydettiğini dosyalar normal şartlarda dosyalarınıza özeldir. Başka herhangi bir uygulama yada kullanıcı bu dosyaları göremez ve uygulama silindiğinde bu dosyalarda otomatik olarak silinir.

Aşağıdaki örnekteki gibi bazı metinlerin bir dosyaya nasıl yazıldığını görebilirsiniz:

 

String dosya_Adi = "oguzbocekci";
String icerik = "merhaba mobilecoder!";
FileOutputStream outputStream;

try {
outputStream = openFileOutput(dosya_Adi, Context.MODE_PRIVATE);
outputStream.write(icerik.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}

 

Context.MODE_PRIVATE, dosyanın yalnızca bu uygulamaya özel olduğunu belirtir. Bu parametre için Context.MODE_APPEND, Context.MODE_WORLD_READABLE, Context.MODE_WORLD_WRİTEABLE parametrelerini de kullanabilirsiniz.

Yukarıda örnekte olduğu gibi dosya yazmak yerine, okumak isterseniz openFileInput metodunu kullanabilirsiniz. Bu metod FileInputStream nesnesi döndürür. Bu nesne üzerinden read() fonksiyonu yardımıyla dosyanın içeriğini elde edebilirsiniz.

Uygulamanızın içinden ihtiyacınız olan okuma öncelikli bazı dosyaları /res/raw klasörüne de koyabilirsiniz. Örneğin Action Bar arama kutucuğu kullanıyorsanız ve arama sırasında kelime tavsiyesinde bulunuyorsanız; bunun için veri tabanı tutmak yerine, sözlüğünüzü raw klasöründe tutup buradan okuyabilirsiniz. Örneğin:

 

Resources res = getResources();
InputStream  is = res.openRawResource(R.raw.dictionary);

 

Bununla ilgili olarak dikkat etmeniz gereken nokta; Bu dosyalarda güncelleme işlemi yapılamaz. Yalnızca içerikleri okuyabilirsiniz.

 

Dış Sistem Belleği (Harici)

Harici depolama alanı erişim kısıtlaması gerektirmeyen diğer uygulamalarla paylaşmak istediğiniz veya kullanıcının bilgisayarıyla erişmesine izin verdiğiniz dosyalar için en iyi yerdir.

Dış sistem belleği SD Card benzeri çıkarılabilir bir bellek olabileceği gibi dahili hafızadan ayrı olarak cihazın içinde sabit bir bellek olarak da bulunur. Bu sistem belleğine kayıt ettiğiniz dosyalar size özel değildir,  herhangi bir sistem veya kullanıcı tarafından görüntülenip, değiştirilebilir. Cihazınızda dış sistem belleğinin kullanılabilir olup olmadığını bilemezsiniz, kullanıcı o anda cihazı bilgisayara bağlamış olabilir ya da sd card çıkarılmış olabilir.

Harici depolama alanının durumunu getExternalStorageState() metoduyla sorgulayabilirsiniz. Metodun döndürdüğü sonuç MEDIA_MOUNTED değeri olursa bu dosya okuma ve yazma yapabileceğiniz anlamına gelir. Aşağıdaki örnek depolama alanının müsait olup olmadığını sorguluyor:

 

/* harici depolama alanının okuma/yazmaya müsaitliğine bakar */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}

/* harici depolama alanının sadece okumaya müsaitliğe bakar */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
  

 

Cihazınız dış ve iç sistem belleklerinin konumlarına ulaşmak için getExternalFilesDir() ve getFilesDir()  adında iki adet metod sunar. Bunlar sırasıyla dış ve iç sistem bellek adreslerini kapsayan birer File nesnesini döndürürler.

 

getFilesDir() metodu dahili belleği gösterdiği için herhangi bir parametre almaz.

getExternalFilesDir() metodu ile kaydetmek istediğiniz dosyanın tipine göre size telefonunuzdaki farklı dizinleri kullanma olanağı sunar, yani uygulamanız için özel dosyaları kaydetmek istiyorsanız bu metodu çağırarak uygun dizini alabilir ve istediğiniz dizinin tipini belirten bir ismi de parametre olarak geçebilirsiniz.

Aşağıdaki örnekte bireysel fotoğraf albümü için bir dizin oluşturmakta kullanabilirsiniz:

 

public File getAlbumStorageDir(Context context, String oguzbocekciAlbum) {
// uygulamamızda kullanmak üzere özel resim dizini için bir dizin alalım
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), oguzbocekciAlbum);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "dizin oluşturalamadı");
}
return file;
}
  

 

Genel dosyalarınızı harici depolama alanına kaydetmek isterseniz,  getExternalStoragePublicDirectory() metodunu çağırarak uygun dizini ifade eden bir File nesnesi oluşturabilirsiniz. Bu metod kaydetmeyi istediğiniz dosyanın tipiyle ilgili bir parametre alır. Böylece diğer genel dosyalarla birlikte mantığa uygun bir şekilde (DIRECTORY_MUSIC veya DIRECTORY_PICTURES gibi) organize edilirler. Örnek:

 

public File getAlbumStorageDir(String albumMobilecoder) {
// kullanıcının genel resimler dizini için kullanalım
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), albumMobilecoder);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "dizin oluşturulamadı");
}
return file;
}

 

Farklı dosya tiplerini kaydetmek ve okumak için;

DIRECTORY_ALARMS: Alarm olarak kullanılan sesler için.

DIRECTORY_DCIM: Telefonunuz ile çektiğiniz fotoğraflar için.

DIRECTORY_DOWNLOADS: İndirilen dosyalarınız için.

DIRECTORY_MOVIES: Film dosyaları için.

DIRECTORY_MUSIC: Müzik dosyaları için.

DIRECTORY_NOTIFICATIONS: Uyarı tonları içeren sesler için.

DIRECTORY_PICTURES: Diğer resim ve fotoğraf dosyaları için.

DIRECTORY_PODCAST: Podcast dosyaları için.

DIRECTORY_RINGTONES: Telefon melodileri için.

dizinlerini kullanabilirsiniz. Eğer dosyalarınız için önceden tanımlı uygun bir alt dizin ismi yoksa getExternalFilesDir() metodunu “null” değer geçerek çağırabilirsiniz. Bu işlem size uygulamanızın harici depolama alanında yer alan özel dizinini döndürecektir.

 

ÖNEMLİ: İster ortak dosyalar için getExternalStoragePublicDirectory() metodunu kullanmış olun, ister uygulamanıza özel dosyalar için getExternalFilesDir() metodunu kullanmış olun, kullanacağınız dizin isimlerinin DIRECTORY_PICTURES gibi API sabitleri tarafından sağlanacağını unutmayın. Bu dizin isimleri, içindeki dosyaların sistem tarafından doğru şekilde muamele görmesini sağlar. Örneğin DIRECTORY_RINGTONES dizinine kaydedilen dosyalar, sistemin medya tarayıcısı tarafından müzik yerine zil sesi olarak kategorize edilir. Dolayısıyla buraya kaydedeceğiniz dosyalar zil sesi dosyası olmalıdır ki kullanıcı cihazını amacına uygun dosyalarla kullanabilsin.

 

Bir dosyayı silmek

Bir dosyayı silmenin en pratik yolu, açılan dosyanın referans değişkeni üzerinden delete() metodunu çağırmaktır.

 

dosyaAdi.delete();

 

Silinecek dosya dahili depolama alanına kaydedilmişse, Context sınıfından yararlanarak yerini öğrenebilir ve deleteFile() metodunu kullanarak silebilirsiniz.

 

Android İşletim Sisteminde Dosya Yönetimini özetleyecek olursak; Aşağıda örnekte bulunan bir yapı kullanarak, uygulamanızın resource’ları arasında kayıtlı bir resim dosyasını harici belleğe kaydedebilir ve oradan silebilirsiniz.

 

void dosyaKaydet()  {

File adres = getExternalFilesDir (Environment.DİRECTORY_PICTURES) ;

File file = new File(adres, “OrnekResim.jpg”) ;

Try  {

InputStream is = getResources().openRawResource(R.drawable.ornek_resim) ;

OutputStream os = new FileOutputStream(file) ;

byte [ ] data = new byte[is.available()] ;

is.read(data) ;

os.write(data) ;

is.close() ;

os.close() ;

}    catch (IOException e)  {

Log.e(“Dis Sistem Bellek Hatasi”, “Dosya Kaydedilirken Hata Olustu

“, e) ;

}

}

void dosyaSil()  {

File adres = getExternalFilesDir (Environment.DİRECTORY_PİCTURES) ;

if (adres  != null)  {

File file = new File(adres, “OrnekResim.jpg”) ;

file.delete() ;

}

}

 Bu sayfadaki parçalar Mobilecoder.net kapsamında oluşturulmuştur ve kaynak olarak;

gelecegiyazanlar.turkcell.com.tr

kodlab yayınları, android programlama kitabı

kullanılmıştır ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir.

teşekkürler.

Oğuz BÖCEKÇİ

Yazar Hakkında

Yazar : oguzbocekci

Yazar Hakkında :

Yazarın Tüm Yazıları İçin Tıklayınız

Yorumlar

Sitemizde En Çok Okunan İçerikler

ANDROİD TELEFONLARA ROOT ATMA
ANDROİD TELEFONLARA ROOT ATMARoot Ne demek ? Bir android cihazı root etmek telefonun
fragment
ANDROİD FRAGMENT YAPISI VE KULLANIMIFragmentler Activity içerisinde yer alan kullanıcı ara yüzleridir. Fragment
Asp.NET’de web servis hazırlama ve Android de kullanimi  Web Servis Nedir ? Web üzerinden HTTP protokolü ile hizmet
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞME
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞMEANDROİD TELEFONLARDA KONFERANS GÖRÜŞME   Konferans görüşme çok fazla bilinmeyen androidin

Sitemizde En Çok Yorumlanan İçerikler

WEB UYGULAMALARINDA EKRAN UYUMU
WEB UYGULAMALARINDA EKRAN UYUMUAndroid için web uygulamaları hazırlarken odaklanmamız gereken en önemli
ActionBar Kullanım Özellikleri
ActionBar Kullanım ÖzellikleriActionBar Genel Bakış ActionBar temel olarak 4 ana işlevsel alan barındırır.

Son Yapılan Yorumlar

  • Kategoriler

  • Son Yazılar

  • Takvim

    Ağustos 2017
    P S Ç P C C P
    « Kas    
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
  • Etiketler

  • Son Yorumlar

    • Arşivler

    • Meta