Anda di halaman 1dari 3

Android: Menulis ke File

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

Selalu tersedia Belum tentu, user bisa mencabut SD Card

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

Tidak memerlukan permission Memerlukan permission di manifest

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.

Pertama tambahkan permission untuk menulis di media eksternal

<manifest>
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>

Tambahkan code berikut dibagian create

protected void onCreate(Bundle savedInstanceState) {


...

//debug untuk melihat tempat penyimpanan


AlertDialog d= new AlertDialog.Builder(this).create();
String dir = getApplicationContext().getExternalFilesDir(null).toString();
d.setMessage("Dibuat di dir" +dir);
d.show();
Log.i("yw", dir);

//siapkan file hasil.txt untuk ditulis


File fileOut = new File(getApplicationContext().getExternalFilesDir(null),
"hasil.txt");
try {
PrintWriter pw = new PrintWriter(fileOut);
pw.println("baris1");
pw.println("baris2");
pw.close();
AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.setMessage("data selesai ditulis");
dialog.show();
Log.i("yw", "tulis sukses");
} catch (Exception ex) {
Log.e("yw", ex.getMessage());
}

//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.

String state = Environment.getExternalStorageState();


if (Environment.MEDIA_MOUNTED.equals(state)) {
//bisa digunakan
}

Penyimpanan Internal

Bagaimana jika kita ingin menulis file di media internal? Intinya hanya mengganti lokasi tempat
penyimpanan.

Ada dua method yang dapat digunakan

getFilesDir(): menghasilkan direktori internal app

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()

Anda mungkin juga menyukai