Converti InputStream in BufferedReader


149

Sto cercando di leggere un file di testo riga per riga utilizzando InputStream dalla directory delle risorse in Android.

Voglio convertire InputStream in BufferedReader per poter usare readLine ().

Ho il codice seguente:

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

La terza riga elimina il seguente errore:

Marcatori multipli su questa linea
Il costruttore BufferedReader (InputStream) non è stato individuato.

Quello che sto cercando di fare in C ++ sarebbe qualcosa del tipo:

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

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

Cosa sto sbagliando o come dovrei farlo? Grazie!

Risposte:


281

BufferedReadernon posso avvolgere InputStreamdirettamente. Ne avvolge un altro Reader. In questo caso, vorresti fare qualcosa del tipo:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

Sì, il wrapping di un InputStream con un InputStreamReader, racchiuso da un BufferedReader è un "trucco" comune per utilizzare la funzione readLine ().
Installazione

14
Consiglio: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));aggiunto in Java 7
brcolow il

I set standard non funzionano a livello di API> 19. @brcolow
Florida,

1
Penso che intendi dire che non funziona se il livello API> = 19?
brcolow,

23

Un costruttore BufferedReader accetta un lettore come argomento, non un InputStream. Dovresti prima creare un Reader dal tuo stream, in questo modo:

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

Preferibilmente, si fornisce anche un nome di codifica Charset o carattere al costruttore StreamReader. Poiché uno stream fornisce solo byte, la loro conversione in testo significa che la codifica deve essere nota. Se non lo si specifica, si presume il valore predefinito di sistema.


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.