Bu dersimizde external storage ile ilgili genel bilgi verip, external cache storage’da dosya oluşturma ve silme işlemlerinden bahsediyoruz.
External Storage : Dosyaların SD Card gibi dış depolama birimlerine kaydedildiği alandır. External storage diyince aklımıza her ne kadar SD Card gelse de artık cihazın kendi hafızası da external storage olarak kullanılabilir(SD Kart kullanmayan cihazlar)
Bu storage kısmındaki public ve private kavramları karşımıza çıkıyor.
Private Files: Buradaki dosyalar her ne kadar o uygulamaya ait olsa da teknik olarak kullanıcı veya başka uygulamalar bu dosyalara erişebilir. Buradaki dosyaların amacı ilgili uygulamaya hizmet etmektir. getExternalFilesDir() : External storage üzerinde private dosyaların kaydedildiği dizindir. Buradaki dosyalar uygulama kaldırıldığında silinir. Buraya uygulama tarafından indirilen geçici media dosyaları konulabilir.
Public Files : Buradaki dosyalar başka uygulamaların ve kullanıcının erişimine açıktır. Uygulama silindiğinde buraya attığı dosyalar silinmez. Buraya resim, müzik, video dosyaları konulabilir. Bu alana erişmek için getExternalStoragePublicDirectory() methodunu kullanırız.
Internal storage’da olduğu gibi external storage’da da cache kısmı bulunmaktadır. İsterseniz cache kavramını bir hatırlayalım.
Cache Storage : Geçici dosyaların tutulduğu alandır. Uygulama kaldırıldığında bu kısımda bulunan dosyalar da silinir. Kısıtlı bir alan olduğundan buradaki dosyaları işimiz bitince silmeliyiz. Internal Storage’da yeterli alan kalmadığında işletim sistemi yer açmak için burada bulunan dosyaları silebilir. Burdaki dosyaların büyüklüğü 1 MB ‘ı aşmamalıdır. Uygulamanın etkili bir şekilde çalışması için bu alan kullanılır.
Cache storage internal ve external olarak ikiye ayrılır. Bu derste external cache storage üzerinde işlemler yapacağız. Yapacağımız işlemlerde dosya oluşturup içeriğini okuyacağız ve bu işlemler daha önce anlatılan dosya yaratma ve okuma işlemlerinden çok da farklı değil. Bu işlemleri bilmeyen arkadaşlar önceki yazılara göz atabilir. Peki farklılıklar nelerdir?
Sadece dosyayı belirtirken farklılık vardır. Dosyaya yazma ve okuma işlemleri aynıdır.
getExternalCacheDir() : Bu method external cache storage’ın yolunu File tipinde geriye gönderir.
1 2 |
File cacheDizini = getExternalCacheDir(); File cacheDosyam = new File(cacheDizini, "externalCacheDosyam.txt"); |
Yukarıdaki kod sayesinde external cache dizininde externalCacheDosyam.txt dosyasını oluşturup, FileOutputStream ile dosyaya veri yazabiliriz.
Dosyadan okurken de aynı yol izlenir. Yani tek farklılık ilgili dizine gitmek ve dosyayı orda oluşturmakta.
Şuana kadar gördüğümüz kavramları tek bir resimde gösterirsek daha iyi anlaşılacaktır.
CacheStorageDemo içerisinde sürekli olarak aynı işlemleri yaptığımız için dosya yazma ve okuma komutlarını methodların içine aldım, bu sayede daha az kod ile aynı işi yapabiliyoruz. Dosyaya yazma methoduna parametre olarak yazılacak dosya adını ve veriyi, dosya okuma methoduna da sadece okunacak dosyayı belirtmemiz yeterli.
Bu derste yazılan kodlar aşağıdaki gibidir. AndroidFileSystemOrnek projesinin bitmiş son halini buradaki linkten indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
public class CacheStorageDemo extends AppCompatActivity { private EditText etInternalCacheData, etExternalCacheData; private TextView txvInternalCacheData, txvExternalCacheData; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cache_storage); etInternalCacheData = (EditText) findViewById(R.id.etInternalCacheData); etExternalCacheData = (EditText) findViewById(R.id.etExternalCacheData); txvInternalCacheData = (TextView) findViewById(R.id.txvInternalCacheContent); txvExternalCacheData = (TextView) findViewById(R.id.txvExternalCacheContent); } public void saveToInternalCache(View view) { String cacheData = etInternalCacheData.getText().toString(); File cacheDizini = getCacheDir(); File cacheDosyam = new File(cacheDizini, "cache_dosyasi.txt"); writeToFile(cacheDosyam, cacheData); } public void loadFromInternalCache(View view) { File cacheDizini = getCacheDir(); File cacheDosyam = new File(cacheDizini, "cache_dosyasi.txt"); String dosyaIcerigi=readFromFile(cacheDosyam); txvInternalCacheData.setText(dosyaIcerigi); } public void saveToExternalCache(View view) { String cacheData=etExternalCacheData.getText().toString(); File cacheDizini=getExternalCacheDir(); File cacheDosyam=new File(cacheDizini, "externalCacheDosyam.txt"); writeToFile(cacheDosyam, cacheData); } public void loadFromExternalCache(View view) { File cacheDizini=getExternalCacheDir(); File cacheDosyam=new File(cacheDizini, "externalCacheDosyam.txt"); String dosyaIcerigi=readFromFile(cacheDosyam); txvExternalCacheData.setText(dosyaIcerigi); } private void writeToFile(File file, String data){ FileOutputStream fos = null; try { fos = new FileOutputStream(file); fos.write(data.getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); Toast.makeText(this, "Dosyaya Yazıldı", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } } } private String readFromFile(File veriOkunacakDosya){ StringBuffer buffer=new StringBuffer(); FileInputStream fis=null; try { fis=new FileInputStream(veriOkunacakDosya); int read; while((read = fis.read()) != -1){ buffer.append((char) read); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } return buffer.toString(); } } |