Convertir InputStream a BufferedReader

149

Estoy tratando de leer un archivo de texto línea por línea usando InputStream desde el directorio de activos en Android.

Quiero convertir InputStream en un BufferedReader para poder usar readLine ().

Tengo el siguiente código:

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

La tercera línea descarta el siguiente error:

Múltiples marcadores en esta línea.
El constructor BufferedReader (InputStream) no está definido.

Lo que estoy tratando de hacer en C ++ sería algo como:

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

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

¿Qué estoy haciendo mal o cómo debo hacerlo? ¡Gracias!

karse23
fuente

Respuestas:

281

BufferedReaderNo se puede envolver InputStreamdirectamente. Envuelve a otro Reader. En este caso, querrás hacer algo como:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
ColinD
fuente
Sí, envolver un InputStream con un InputStreamReader, que está envuelto por un BufferedReader es un "truco" común para usar la función readLine ().
Configuración
14
Recomiendo: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));agregado en Java 7
brcolow
StandardCharsets no funciona en API Level> 19. @brcolow
Florida
1
Creo que quieres decir que no funciona a menos que el Nivel API> = 19?
brcolow
23

Un constructor BufferedReader toma un lector como argumento, no un InputStream. Primero debe crear un lector a partir de su transmisión, así:

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

Preferiblemente, también proporciona un Charset o un nombre de codificación de caracteres para el constructor StreamReader. Como una secuencia solo proporciona bytes, convertirlos a texto significa que la codificación debe ser conocida. Si no lo especifica, se asume el valor predeterminado del sistema.

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