Converter InputStream em BufferedReader

149

Estou tentando ler um arquivo de texto linha por linha usando InputStream no diretório de ativos no Android.

Eu quero converter o InputStream em um BufferedReader para poder usar o readLine ().

Eu tenho o seguinte código:

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

A terceira linha descarta o seguinte erro:

Vários marcadores nesta linha
O construtor BufferedReader (InputStream) não está localizado.

O que estou tentando fazer em C ++ seria algo como:

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

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

O que estou fazendo de errado ou como devo fazer isso? Obrigado!

karse23
fonte

Respostas:

281

BufferedReadernão pode quebrar um InputStreamdiretamente. Envolve outro Reader. Nesse caso, você deseja fazer algo como:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
ColinD
fonte
Sim, agrupar um InputStream com um InputStreamReader, envolvido por um BufferedReader, é um "truque" comum para usar a função readLine ().
Setup
14
Eu recomendo: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));adicionado em Java 7
brcolow
StandardCharsets não funcionam no nível da API> 19. @brcolow
Florida
1
Eu acho que você quer dizer que não funciona, a menos que o nível da API seja = 19?
brcolow
23

Um construtor BufferedReader usa um leitor como argumento, não um InputStream. Você deve primeiro criar um Reader a partir do seu fluxo, da seguinte forma:

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

De preferência, você também fornece um nome de codificação de caractere ou de caractere ao construtor StreamReader. Como um fluxo fornece apenas bytes, convertê-los em texto significa que a codificação deve ser conhecida. Se você não o especificar, o padrão do sistema será assumido.

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