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!

karse23
sumber

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"));
ColinD
sumber
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.

G_H
sumber
20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Hans
sumber