Konwertuj InputStream na BufferedReader

149

Próbuję odczytać plik tekstowy wiersz po wierszu przy użyciu InputStream z katalogu zasobów w systemie Android.

Chcę przekonwertować InputStream na BufferedReader, aby móc korzystać z readLine ().

Mam następujący kod:

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

Trzecia linia pomija następujący błąd:

Wiele znaczników w tej linii
Konstruktor BufferedReader (InputStream) jest niezdefiniowany.

To, co próbuję zrobić w C ++, to coś takiego:

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

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

Co robię źle lub jak mam to zrobić? Dzięki!

karse23
źródło

Odpowiedzi:

281

BufferedReadernie można zawinąć InputStreambezpośrednio. Otacza innego Reader. W takim przypadku chciałbyś zrobić coś takiego:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
ColinD
źródło
Tak, zawijanie InputStream za pomocą InputStreamReader, które jest zawijane przez BufferedReader to typowa „sztuczka” przy użyciu funkcji readLine ().
Konfiguracja
14
Polecam: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));dodane w Javie 7
brcolow
StandardCharsets nie działają na poziomie API> 19. @brcolow
Floryda
1
Myślę, że chcesz powiedzieć, że nie działa, chyba że poziom API> = 19?
brcolow
23

Konstruktor BufferedReader przyjmuje czytnik jako argument, a nie InputStream. Najpierw powinieneś utworzyć Czytnik ze swojego strumienia, na przykład:

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

Najlepiej jest również podać Charset lub nazwę kodowania znaków do konstruktora StreamReader. Ponieważ strumień dostarcza tylko bajtów, konwersja ich na tekst oznacza, że ​​kodowanie musi być znane. Jeśli tego nie określisz, przyjmowana jest wartość domyślna systemu.

G_H
źródło
20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Hans
źródło