Android menyediakan tiga cara untuk menyimpan data di device. Jika hanya untuk menyimpan
sedikit data (beberapa variabel), gunakan shared preferences. Jika data cukup kompleks dan sering
memerlukan pencarian (akses random), gunakan database. Jika ukuran datanya besar, tidak perlu
pencarian, dapat dishare di SD card untuk dibaca komputer, atau memerlukan format yang yang
sangat spesifik, gunakan file seperti yang akan dibahas dalam modul ini.
File dapat disimpan baik di dalam device (internal) maupun eksternal (SD card). Perbedaan
penyimpanan internal dan eksternal dapat dilihat di tabel berikut
Internal Eksternal
Secara default, tidak dapat diakses oleh app Bisa diakses oleh siapa saja
lain
Jika app diuninstall, akan ikut terhapus. Tidak terhapus, kecuali disimpan di tempat
yang diperoleh dari method getExternalFilesDir
Penyimpanan internal cocok untuk data yang tidak perlu dibaca app lain, sedangkan penyimpanan
eksternal cocok jika data berukuran sangat besar atau data tidak masalah dibaca app lain termasuk
untuk diakses komputer.
Bagi anda yang telah mengenal stream dan file di Java, anda dapat membaca secara cepat tutorial
ini, karena tidak ada perbedaan antara Java dan Android. Class yang mensupport operasi file
disediakan di package java.io.*
Pada tutorial ini kita akan menyimpan file teks di media penyimpanan eksternal.
<manifest>
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
//baca data
File fileInput = new File(getApplicationContext().getExternalFilesDir(null),
"hasil.txt");
try {
Scanner sc = new Scanner(fileInput);
String strBaris;
StringBuilder sb = new StringBuilder(); //untuk menampung string
while (sc.hasNextLine()) {
strBaris = sc.nextLine(); //ambil satu baris
sb.append(strBaris);
}
AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.setMessage("data yg dibaca: " + sb.toString());
dialog.show();
} catch (FileNotFoundException ex) {
Log.e("yw", ex.getMessage());
}
}
Jalankan, maka akan ditampilkan lokasi data (sebagai contoh di hp saya:
dir/storage/emulated/0/Android/data/[package app]/files) dan data yang berhasil dibaca. Lokasi ini
sifatnya dapat diakses siapapun, jika kita hubungkan HP dengan komputer, maka kita dapat
mengambil file hasil.txt ini. Karena lokasi diambil dengan getExternalFilesDir, jika app diuninstall
maka isi dari direktori ini juga akan ikut dihapus.
Karena media eksternal belum tentu tersedia (misal sedang dikeluarkan), maka sebaiknya perlu
dicek dulu apakah tersedia atau tidak. Jika output dari method getExternalStorageState
menghasilkan MEDIA_MOUNTED maka artinya media siap dibaca dan ditulis. Berikut contohnya.
Penyimpanan Internal
Bagaimana jika kita ingin menulis file di media internal? Intinya hanya mengganti lokasi tempat
penyimpanan.
getCacheDir(): menghasilkan direktori internal untuk cache. Anggap saja cache ini sebagai direktori
sementara untuk menyimpan file-file sementara yang dapat dihapus jika proses sudah selesai.
Android dapat menghapus isi cache ini secara otomatis jika kapasitas menipis, walaupun sebaiknya
app sendiri yang membersihkan isi cache jika sudah tidak digunakan.
Untuk mencoba, silahkan ganti getExternalFilesDir pada code sebelumnya dengan getFilesDir()