Преобразовать InputStream в BufferedReader - PullRequest
141 голосов
/ 05 марта 2011

Я пытаюсь читать текстовый файл построчно, используя InputStream из каталога assets в Android.

Я хочу преобразовать InputStream в BufferedReader, чтобы иметь возможность использовать readLine ().

У меня есть следующий код:

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

В третьей строке сбрасывается следующая ошибка:

Multiple markers at this line
The constructor BufferedReader (InputStream) is undefinded.

То, что я пытаюсь сделать в C, будет что-то вроде:

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

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

Что я делаю не так или как мне это сделать?Спасибо!

Ответы [ 3 ]

263 голосов
/ 05 марта 2011

BufferedReader не может обернуть InputStream напрямую. Это оборачивает другой Reader. В этом случае вы хотели бы сделать что-то вроде:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
22 голосов
/ 05 марта 2011

Конструктор BufferedReader принимает в качестве аргумента reader , а не InputStream. Сначала вы должны создать Reader из вашего потока, например:

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

Предпочтительно, вы также предоставляете имя кодировки или кодировки символов для конструктора StreamReader. Поскольку поток предоставляет только байты, преобразование их в текст означает, что кодировка должна быть известна. Если вы не укажете его, предполагается системное значение по умолчанию.

20 голосов
/ 05 марта 2011
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
...