Fredrik a raison BufferedReader
, mais je serais en désaccord sur PrintWriter
- mon problème avec PrintWriter
est qu'il engloutit des exceptions.
Il est intéressant de comprendre pourquoi FileInputStream
et FileOutputStream
n'ont aucune méthode relative aux lignes: les classes *Stream
concernent les flux de données binaires. Il n'y a pas de "ligne" en termes de données binaires. Les classes *Reader
et *Writer
sont sur le le texte, où le concept d'une ligne a beaucoup plus de sens ... bien qu'un général Reader
n'a pas assez d'intelligence pour lire une ligne (juste un bloc de caractères) donc c'est là BufferedReader
entre
InputStreamReader
et OutputStreamWriter
sont des classes d'adaptateur, appliquant un codage de caractères à un flux d'octets pour les convertir en caractères, ou un flux de caractères pour les transformer en octets.
Donc, vous voulez probablement BufferedReader
envelopper un InputStreamReader
enveloppant un FileInputStream
pour la lecture - puis appelez readLine()
. Pour l'écriture, utilisez un BufferedWriter
enveloppant un OutputStreamWriter
enveloppant un FileOutputStream
- puis appelez write(String)
et newLine()
. (Cela vous donnera le séparateur de ligne par défaut de la plate-forme - si vous voulez un particulier, il suffit d'écrire comme une chaîne.)
Il y a aussi la classe FileReader
qui combine sorte de FileInputStream
et InputStreamReader
(et FileWriter
-ce que l'équivalent), mais ceux-ci utilisent toujours l'encodage par défaut de la plate-forme, qui est presque jamais ce que vous voulez. Cela les rend tous, mais inutiles IMO.
"lignes" implique des données textuelles. "flux de sortie" implique des données binaires. Lequel est-ce? –