Ответ 1
BufferedReader
не может напрямую обернуть InputStream
. Он переносит другой Reader
. В этом случае вы хотите сделать что-то вроде:
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
Я пытаюсь прочитать текстовый файл построчно с помощью InputStream из каталога ресурсов в 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();
...
Что я делаю не так или как мне это делать? Спасибо!
BufferedReader
не может напрямую обернуть InputStream
. Он переносит другой Reader
. В этом случае вы хотите сделать что-то вроде:
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
Конструктор BufferedReader принимает reader как аргумент, а не InputStream. Сначала вы должны создать Reader из своего потока, например:
Reader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);
Предпочтительно, вы также указываете имя кодировки или символьного кодирования для конструктора StreamReader. Поскольку поток просто предоставляет байты, преобразование их в текст означает, что кодирование должно быть известно. Если вы не укажете его, предполагается, что используется системная настройка.
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);