Berikut adalah apa yang saya lakukan dalam aktivitas untuk memperpanjang / memodifikasi bacaan buffered yang sesuai dengan kebutuhan Anda
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT: Jawaban saya mungkin tidak berguna jika pertanyaan Anda adalah bagaimana melakukannya di luar kegiatan. Jika pertanyaan Anda hanyalah cara membaca file dari aset, maka jawabannya ada di atas.
MEMPERBARUI :
Untuk membuka file yang menentukan tipe cukup tambahkan tipe dalam panggilan InputStreamReader sebagai berikut.
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT
Seperti @Stan katakan dalam komentar, kode yang saya berikan tidak merangkum garis. mLine
diganti setiap pass. Itu sebabnya saya menulis//process line
. Saya berasumsi file tersebut berisi beberapa jenis data (yaitu daftar kontak) dan setiap baris harus diproses secara terpisah.
Jika Anda hanya ingin memuat file tanpa proses apa pun, Anda harus meringkas mLine
pada setiap pass menggunakan StringBuilder()
dan menambahkan setiap pass.
EDIT LAIN
Menurut komentar @Vincent saya menambahkan finally
blok.
Perhatikan juga bahwa di Java 7 dan di atasnya Anda dapat menggunakan try-with-resources
untuk menggunakan AutoCloseable
dan Closeable
fitur-fitur Java terbaru.
KONTEKS
Dalam komentar @LunarWatcher menunjukkan bahwa itu getAssets()
adalah class
in context
. Jadi, jika Anda menyebutnya di luar activity
Anda perlu merujuknya dan meneruskan contoh konteks ke aktivitas.
ContextInstance.getAssets();
Ini dijelaskan dalam jawaban @aneane. Jadi jika ini bermanfaat bagi Anda, jawablah jawabannya karena dialah yang menunjukkan itu.
finally {reader.close();}
.context.getAssets(.....)
hanya berfungsi di Aktivitas di kelas lain yang harus Anda gunakan
Context
untuk itu.Jadikan konstruktor untuk Utils melalui referensi aktivitas (cara jelek) atau konteks aplikasi sebagai parameter. Menggunakan yang menggunakan getAsset () di kelas Utils Anda.
sumber
Context
.Lebih baik terlambat daripada tidak sama sekali.
Saya mengalami kesulitan membaca file baris demi baris dalam beberapa keadaan. Metode di bawah ini adalah yang terbaik yang saya temukan, sejauh ini, dan saya merekomendasikannya.
Pemakaian:
String yourData = LoadData("YourDataFile.txt");
Di mana YourDataFile.txt diasumsikan berada di aset /
sumber
stream.available()
.sumber
input = new BufferedReader(new InputStreamReader(fIn));
.sumber
solusi satu baris untuk kotlin:
sumber
getAssets()
Metode akan berfungsi saat Anda memanggil di dalam kelas Activity.Jika Anda memanggil metode ini di kelas non-Aktivitas maka Anda perlu memanggil metode ini dari Konteks yang dilewatkan dari kelas Activity. Jadi di bawah ini adalah garis oleh Anda dapat mengakses metode ini.
ContextInstance
dapat dilewati sebagai kelas Activity ini.sumber
Membaca dan menulis file selalu verbose dan rawan kesalahan. Hindari jawaban ini dan gunakan Okio saja:
sumber
IOException
mencoba / menangkap blok 2) Menutup aliran dalam kasus pengecualian dilemparkan 3) Kode ini membaca satu baris, bukan seluruh file. Dari segi kinerja, perpustakaan ini jelas merupakan salah satu dari jenisnya, tidak diragukan lagi. Sekarang, beri tahu saya apakah saya masih harus menghindari "jawaban ini" dan menerapkan Okio hanya untuk membaca file? Jawabannya adalah TIDAK, kecuali itu sudah menjadi bagian dari aplikasi Anda.Berikut adalah metode untuk membaca file dalam aset:
sumber
Anda dapat memuat konten dari file. Anggap file tersebut ada di folder aset.
Sekarang Anda bisa mendapatkan konten dengan memanggil fungsi sebagai berikut
Mengingat data.json disimpan di Application \ app \ src \ main \ assets \ data.json
sumber
Di MainActivity.java
Anda juga dapat membuat kelas terpisah yang melakukan semua pekerjaan
Menurut pendapat saya lebih baik untuk membuat antarmuka, tetapi itu tidak perlu
sumber
Jika Anda menggunakan kelas lain selain Aktivitas, Anda mungkin ingin melakukannya seperti,
sumber
Menggunakan Kotlin, Anda dapat melakukan hal berikut untuk membaca file dari aset di Android:
sumber
Mungkin sudah terlambat tetapi demi orang lain yang mencari jawaban bagus:
sumber
cityfile.txt
sumber
File no longer available That file has now been permanently removed and cannot be recovered
Kelas Scanner dapat menyederhanakan ini.
sumber
@HpTerm jawab versi Kotlin:
sumber
var mLine:String
harusvar mLine:String?
var data: String?
harusvar data = ""
kembali jenis harusString
Berikut cara untuk mendapatkan
InputStream
untuk file dalamassets
folder tanpaContext
,Activity
,Fragment
atauApplication
. Bagaimana Anda mendapatkan data dari ituInputStream
terserah Anda. Ada banyak saran untuk itu dalam jawaban lain di sini.Kotlin
Jawa
Semua taruhan dibatalkan jika ada kebiasaan
ClassLoader
yang dimainkan.sumber