Saat Anda perlu bekerja dengan video, audio, json, atau hanya file teks biasa, Anda dapat
menggunakan file Java I/O untuk file lokal. Anda akan menggunakan File, InputStream,
dan OutputWriter, dan I/O di Java—jika Anda pernah menggunakannya sebelumnya. Yang
akan berbeda di Android adalah tempat Anda menyimpannya. Dalam aplikasi desktop Java,
Anda dapat meletakkan file Anda secara praktis di mana pun Anda inginkan. Itu tidak terjadi
di Android. Sama seperti di aplikasi web Java, aplikasi Android tidak gratis untuk membuat
dan membaca file di mana saja. Ada tempat tertentu di mana aplikasi Anda memiliki akses
baca dan tulis.
https://doi.org/10.1007/978-1-4842-5937-
5_14
© Ted Hagos 2020
T. Hagos, Pelajari Android Studio 4,
181
Chapter Working With
14 Files
Penyimpanan internal
• Memori selalu tersedia untuk aplikasi Anda. Tidak ada bahaya pengguna
melepas sdcard atau perangkat apa pun. Dijamin selalu ada.
• Ruang penyimpanan akan berukuran lebih kecil daripada penyimpanan
eksternal karena aplikasi Anda hanya akan dialokasikan sebagian dari
penyimpanan flash yang digunakan bersama oleh semua aplikasi lain.
Ini menjadi perhatian di versi Android sebelumnya, tetapi sekarang
tidak terlalu mengkhawatirkan. Menurut Definisi Kompatibilitas
Android, pada Android 6.0, ponsel atau tablet Android harus memiliki
setidaknya 1,5 GB ruang non-volatil yang disediakan untuk ruang
pengguna (partisi /data). Ruang ini seharusnya cukup untuk sebagian
besar
aplikasi. Anda dapat membaca definisi kompatibilitas di sini: https://bit.ly/
android6compatibilitydefinition.
• Saat aplikasi Anda membuat file di ruang ini, hanya aplikasi Anda
yang dapat mengaksesnya; kecuali ketika ponsel di-root, tetapi
sebagian besar pengguna tidak melakukan root pada ponsel mereka,
jadi umumnya hal itu tidak menjadi masalah.
• Saat Anda mencopot pemasangan aplikasi, semua file yang dibuatnya akan dihapus.
Penyimpanan eksternal
Direktori Cache
Chapter Working With
Apakah Anda memilih penyimpanan internal atau eksternal, Anda 14 mungkin masih harus
Files
membuat satu keputusan lagi tentang lokasi file. Anda dapat meletakkan file Anda di
direktori cache atau di tempat yang lebih permanen. OS Android atau aplikasi pihak
ketiga dapat mengklaim kembali file dalam direktori cache jika diperlukan ruang. Semua
file yang tidak ada di direktori cache cukup aman
Chapter Working With
14 Files
kecuali Anda menghapusnya secara manual. Dalam bab ini, kami tidak akan bekerja
dengan direktori cache atau penyimpanan eksternal. Kami hanya akan menggunakan
penyimpanan internal, dan kami akan meletakkan file di lokasi standar.
Daftar 14-1 menunjukkan cuplikan kode beranotasi tentang cara menyimpan data String ke
file.
Membaca dari file melibatkan lebih banyak langkah daripada menulisnya. Anda
biasanya perlu melakukan hal berikut:
1. Dapatkan FileInputStream.
3. Teruslah membaca sampai tidak ada lagi yang bisa dibaca. Anda akan
tahu saat berada di akhir file jika nilai byte terakhir yang Anda baca
adalah -1. Saatnya untuk berhenti saat itu.
4. Saat Anda bekerja sampai akhir file, Anda perlu menyimpan byte
yang Anda ambil dari aliran ke dalam wadah sementara.
StringBuilder atau StringBuffer harus melakukan triknya.
Membangun objek String menggunakan operator plus adalah
pemborosan dan tidak efisien karena String tidak dapat diubah.
Setiap kali Anda menggunakan plus , itu membuat objek String
baru; jika file Anda memiliki 2000 karakter, Anda akan membuat
2000 objek String. Ini akan
Chapter Working With
terjadi jika Anda membaca file teks. Jika Anda membaca14sesuatu Files
yang lain seperti file audio atau video, Anda akan menggunakan
struktur data yang berbeda.
Chapter Working With
14 Files
5. Saat Anda mencapai akhir file, berhenti membaca. Lakukan apa
yang perlu Anda lakukan dengan apa yang telah Anda baca, dan
jangan lupa untuk menutupnya.
Daftar 14-2 menunjukkan cuplikan kode beranotasi tentang cara membaca data String dari
file.
}
(); Log.e
}
catch(IOException yaitu) {
(TAG, yaitu.getMessage());
Kami tidak akan dapat membaca seluruh file dalam satu gerakan. Kami akan
membacanya dengan potongan. saat kita mendapatkan beberapa
potongan, kita akan menyimpannya di dalam objek stringBuilder.
openFileInput () mengembalikan Fileinputstream; ini adalah objek yang perlu
kita baca dari file. satu-satunya parameter yang diperlukan adalah nama
file yang akan dibaca. Menggunakan try-with-resources di sini membuat
kita tidak perlu menulis kode boilerplate untuk menutup file.
metode satu read() byte data dari aliran input dan mengembalikannya sebagai
bilangan bulat. Kita perlu terus membaca dari aliran satu byte pada satu
waktu sampai kita mencapai penanda akhir file (eoF). Ketika tidak ada lagi
byte untuk dibaca dari aliran, eoF ditandai sebagai -1. Kami akan
Chapter Working With
menggunakan ini sebagai kondisi untuk loop sementara.
14 Sampai
Filesmetode
read() tidak mengembalikan -1, kami terus membaca.
metode mengembalikan read() sebuah int; ini adalah nilai asCii dari setiap
huruf dalam file, yang dikembalikan sebagai bilangan bulat. Kita harus
melemparkannya ke char sebelum kita bisa memasukkannya ke dalam
stringBuilder.
. Ketika kita kehabisan byte untuk membaca, kita akan keluar dari loop
dan mengeluarkan string dari stringBuildersekarang, Anda dapat
bekerja dengan konten file sebagai string.
Chapter Working With
14 Files
Mari kita buat proyek kecil untuk menyatukan semua ini. Buat proyek dengan
Aktivitas kosong. Aplikasi kecil kita akan memiliki komponen View berikut:
• EditText—Ini akan memungkinkan kita untuk memasukkan beberapa teks.
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk
/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Tombol
android:id="@+id
/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="13dp"
android:layout_marginStart="17dp"
android:text="save"
app:layout_constraintBottom_toBottomOf="induk"
app:layout_toStartOfStart_ parent"
tools:ignore="MissingConstraints" />
<EditText
android:id="@+id/txtinput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
Chapter Working With
14 Files
android:ems=" 10"
android:inputType="textMultiLine"
aplikasi:layout_constraintEnd_toEndOf="induk"
aplikasi:layout_constraintHorizontal_bias="0.
0"
aplikasi:layout_constraintStart_toStartOf="in
duk"
aplikasi:layout_constraintTop_toTopOf="induk"
/>
<TextView android:id="@+id
txtoutput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="372dp"
android:inputType="textMultiLin e"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintLayout.Constraintwid> Next.Constraintlayout
. , edit MainActivity agar sesuai dengan konten Listing 14-4.
= findViewById(R.id.txtinput);
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
public @Override
void onClick(View v) {
// ini adalah tempat kita memicu penyimpanan data
}
});
}
}
edittext , textView, variabel nama file, dan variabel tag sebagai anggota
kelas; kita akan merujuk mereka nanti.
. menginisialisasi variabel textView dan edittext di dalam callback onCreate()
Ikat Tombol ke objek pendengar. Ketika Tombol diklik, kita akan memanggil
metode yang akan berisi kode-kode untuk menyimpan isi txtinput ke sebuah
file.
Selanjutnya, tambahkan metode lain ke MainActivity dan beri nama loadData(); kode-
kode tersebut
ditunjukkan pada Listing 14-6. Ini adalah kode yang sama seperti pada Listing 14-2, tapi
kali ini, kita mengatur teks txtinput dan txtoutput ke isi file yang baru saja kita baca.
catch(IOException yaitu) {
Log.e(TAG, mis.getMessage());
}
}
Kami ingin konten "myfile.txt" ditampilkan saat aplikasi dibuka. Kita dapat melakukan
Chapter Working With
ini dengan memanggil loadData() di dalam onResume() dari 14
MainActivity.Files
Ganti
onResume() dan panggil metode loadData() , seperti yang ditunjukkan pada Listing 14-7.
Chapter Working With
14 Files
Daftar 14-7. onResume()
@Override
Pada titik ini, kita sudah cukup banyak selesai. Gambar 14-1 menunjukkan aplikasi kita
berjalan di
emulator.
Anda dapat melihat konten file lokal menggunakan Device Explorer. Dari bilah menu
utama, pilih Lihat Alat Windows Penjelajah Perangkat. Jendela alat Device Explorer
muncul di IDE, seperti yang ditunjukkan pada Gambar 14-2.
Chapter Working With
14 Files
ke data Telusuri data nama paket aplikasi file ). Anda dapat melihat
konten file dengan mengklik dua kali; Android Studio akan menampilkan
isinya.
Ringkasan
• Anda dapat menyimpan file Anda baik di
penyimpanan internal yang selalu tersedia tetapi
terbatas atau di penyimpanan eksternal yang lebih
besar tetapi mungkin dilepas.
• Panggilan Java I/O melempar Pengecualian; menangani mereka
dengan tepat.