Convertir InputStream en BufferedReader


149

J'essaie de lire un fichier texte ligne par ligne en utilisant InputStream à partir du répertoire des actifs d'Android.

Je veux convertir InputStream en 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) n'est pas trouvé.

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 dois-je le faire? Merci!

Réponses:


281

BufferedReaderne peut pas envelopper un InputStreamdirectement. Il en enveloppe un autre Reader. Dans ce cas, vous voudriez faire quelque chose comme:

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

Oui, encapsuler un InputStream avec un InputStreamReader, qui est encapsulé par un BufferedReader est une «astuce» courante pour utiliser la fonction readLine ().
Configuration du

14
Je recommande: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));ajouté dans Java 7
brcolow

Les StandardCharsets ne fonctionnent pas au niveau d'API> 19. @brcolow
Florida

1
Je pense que vous voulez dire que cela ne fonctionne pas à moins que le niveau d'API> = 19?
brcolow

23

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

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. Puisqu'un flux ne fournit que des octets, les convertir en texte signifie que l'encodage doit être connu. Si vous ne le spécifiez pas, la valeur par défaut du système est utilisée.


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.