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!

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"));

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.


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.