Convertir InputStream a BufferedReader

1 minuto de lectura

avatar de usuario
karse23

Estoy tratando de leer un archivo de texto línea por línea usando InputStream del 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 arroja el siguiente error:

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

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!

BufferedReader no puedo envolver un InputStream directamente. envuelve 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

    29 de septiembre de 2014 a las 11:09

  • Yo recomiendo: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); añadido en Java 7

    – marrón

    19/03/2015 a las 21:51

  • StandardCharsets no funciona en el nivel de API> 19. @brcolow

    – florida

    15/08/2015 a las 21:21

  • Creo que quiere decir que no funciona a menos que el nivel de API sea >= 19.

    – marrón

    15 de agosto de 2015 a las 22:23

  • @brcolow StandardCharsets se agregó en el nivel API 19. Quiere decir <19.

    – algo

    18 abr a las 11:29

avatar de usuario
G_H

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 al constructor de StreamReader. Dado que una secuencia solo proporciona bytes, convertirlos en texto significa que se debe conocer la codificación. Si no lo especifica, se asume el valor predeterminado del sistema.

InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad