Konvertieren Sie InputStream in BufferedReader


149

Ich versuche, eine Textdatei zeilenweise mit InputStream aus dem Assets-Verzeichnis in Android zu lesen.

Ich möchte den InputStream in einen BufferedReader konvertieren, um die readLine () verwenden zu können.

Ich habe folgenden Code:

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

In der dritten Zeile wird der folgende Fehler gelöscht:

Mehrere Markierungen in dieser Zeile
Der Konstruktor BufferedReader (InputStream) ist nicht definiert.

Was ich in C ++ versuche, wäre ungefähr so:

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

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

Was mache ich falsch oder wie soll ich das machen? Vielen Dank!

Antworten:


281

BufferedReaderkann nicht InputStreamdirekt einwickeln . Es hüllt einen anderen ein Reader. In diesem Fall möchten Sie Folgendes tun:

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

Ja, das Umschließen eines InputStreams mit einem InputStreamReader, der von einem BufferedReader umschlossen wird, ist ein häufiger "Trick", um die Funktion readLine () zu verwenden.
Setup

14
Ich empfehle: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));hinzugefügt in Java 7
brcolow

StandardCharsets funktionieren nicht auf API-Ebene> 19. @ Brcolow
Florida

1
Ich denke, Sie wollen damit sagen, dass es nicht funktioniert, wenn API Level> = 19?
Brcolow

23

Ein BufferedReader-Konstruktor verwendet einen Reader als Argument, keinen InputStream. Sie sollten zuerst einen Reader aus Ihrem Stream erstellen, wie folgt:

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

Vorzugsweise geben Sie dem StreamReader-Konstruktor auch einen Zeichensatz- oder Zeichenkodierungsnamen an. Da ein Stream nur Bytes bereitstellt, bedeutet die Konvertierung dieser in Text, dass die Codierung bekannt sein muss. Wenn Sie es nicht angeben, wird der Systemstandard angenommen.


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.