web-dev-qa-db-fra.com

Convertir InputStream en BufferedReader

J'essaie de lire ligne par ligne un fichier texte à l'aide de InputStream à partir du répertoire assets d'Android.

Je veux convertir InputStream à BufferedReader pour pouvoir utiliser readLine ().

J'ai le code suivant:

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

La troisième ligne supprime l'erreur suivante:

Plusieurs marqueurs sur cette ligne 
 Le constructeur BufferedReader (InputStream) est indéfini.

Ce que j'essaie de faire en C serait quelque chose comme:

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

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

Qu'est-ce que je fais mal ou comment devrais-je le faire? Merci!

141
karse23

BufferedReader ne peut pas envelopper un InputStream directement. Cela enveloppe une autre Reader. Dans ce cas, vous voudriez faire quelque chose comme:

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

Un constructeur BufferedReader prend un lecteur en argument, pas un InputStream. Vous devez d’abord créer un lecteur à partir de votre flux, comme suit:

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

De préférence, vous fournissez également un nom de jeu de caractères ou de codage de caractères au constructeur StreamReader. Comme un flux ne fournit que des octets, leur conversion en texte signifie que le codage doit être connu. Si vous ne le spécifiez pas, la valeur système par défaut est utilisée.

22
G_H
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
20
Hans