Konversi InputStream ke BufferedReader


149

Saya mencoba membaca file teks baris demi baris menggunakan InputStream dari direktori aset di Android.

Saya ingin mengonversi InputStream ke BufferedReader untuk dapat menggunakan readLine ().

Saya memiliki kode berikut:

InputStream is;
is = myContext.getAssets().open ("file.txt");
BufferedReader br = new BufferedReader (is);

Baris ketiga menghilangkan kesalahan berikut:

Banyak penanda di baris ini
Konstruktor BufferedReader (InputStream) tidak ditentukan.

Apa yang saya coba lakukan di C ++ akan menjadi seperti:

StreamReader file;
file = File.OpenText ("file.txt");

line = file.ReadLine();
line = file.ReadLine();
...

Apa yang saya lakukan salah atau bagaimana saya harus melakukan itu? Terima kasih!

Jawaban:


281

BufferedReadertidak dapat membungkus secara InputStreamlangsung. Itu membungkus yang lain Reader. Dalam hal ini Anda ingin melakukan sesuatu seperti:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

Ya, membungkus InputStream dengan InputStreamReader, yang dibungkus oleh BufferedReader adalah "trik" umum untuk menggunakan fungsi readLine ().
Pengaturan

14
Saya sarankan: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));ditambahkan di Java 7
brcolow

StandardCharsets tidak berfungsi pada API Level> 19. @brcolow
Florida

1
Saya pikir Anda bermaksud mengatakan tidak bekerja kecuali API Level> = 19?
brcolow

23

Konstruktor BufferedReader mengambil pembaca sebagai argumen, bukan InputStream. Anda harus terlebih dahulu membuat Pembaca dari aliran Anda, seperti:

Reader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);

Lebih disukai, Anda juga memberikan nama pengkodean karakter atau Charset ke konstruktor StreamReader. Karena streaming hanya menyediakan byte, mengonversinya menjadi teks berarti pengodeannya harus diketahui. Jika Anda tidak menentukannya, sistem dianggap default.


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.