FileReader rd=new FileReader("new.mp4");
FileWriter wr=new FileWriter("output.mp4");
int ch;
while((ch=rd.read())!=-1)
wr.write(ch);
wr.flush();
wr.close();
Lorsque j'utilise les variables FileReader
et FileWriter
pour lire et écrire un fichier mp4, le fichier output.mp4
ne peut pas être bien rendu. Mais lorsque j’utilise FileInputStream
et FileOutputStream
à la place, cela a bien fonctionné.
Je peux donc conclure que FileReader
et FileWriter
servent uniquement à lire et à écrire du texte?
Oui, votre conclusion est que les sous-classes correctes de Reader
et Writer
sont destinées à la lecture/écriture de contenu texte. InputStream
/OutputStream
sont pour le contenu binaire. Si vous regardez la documentation:
Reader
- Classe abstraite pour la lecture de flux de caractères
InputStream
- La classe abstraite est la superclasse de toutes les classes représentant un flux d'octets en entrée.
FileReader
(et effectivement n'importe quoi étendre le lecteur) est bien pour texte. De la documentation de Reader
:
Classe abstraite pour la lecture de flux de caractères.
(C'est moi qui souligne.) Regardez l'API et vous verrez que tout cela est lié au texte - char
au lieu de byte
partout.
InputStream
et OutputStream
sont destinés aux données binaires, telles que les fichiers mp4.
Personnellement, j’éviterais plutôt FileReader
car il utilise toujours le codage de caractères par défaut du système. Utilisez plutôt InputStreamReader
autour d'une FileInputStream
..., mais uniquement lorsque vous souhaitez traiter du texte.
Soit dit en passant, c’est une façon très inefficace de copier d’une entrée à une sortie ... utilisez les surcharges de read
et write
qui lisent ou écrivent dans un tampon - un byte[]
ou un char[]
. Sinon, vous appelez lire et écrire pour chaque octet/caractère du fichier.
Vous devez aussi fermer IO dans des blocs finally
afin qu'ils soient fermés même si une exception est générée lors de leur traitement.
FileInputStream
est utilisé pour lire des flux d'octets bruts de données, tels que des images brutes. FileReaders
, en revanche, sont utilisés pour lire des flux de caractères
La différence entre FileInputStream
et FileReader
est de, FileInputStream
lit le fichier octet par octet et FileReader
lit le fichier caractère par caractère.
Ainsi, lorsque vous essayez de lire le fichier contenant le caractère "Č"
, .__ dans FileInputStream
donnera le résultat sous la forme 196 140
, car la valeur ASCII
de Č
est 268
.
Dans FileReader
donnera le résultat sous la forme 268
, qui est la valeur ASCII
du caractère Č
.
"FileWriter est destiné à l'écriture de flux de caractères. Pour l'écriture de flux d'octets bruts, envisagez d'utiliser un FileOutputStream."
http://download.Oracle.com/javase/1.4.2/docs/api/Java/io/FileWriter.html
FileWriter et FileReader sont conçus pour les flux de caractères ...
meilleures salutations.
Furkan
Un fichier texte peut être lu en utilisant fileReader
et fileInputStream
, mais les formats mp3 et png ne peuvent être lus qu'en utilisant fileInputStream
fileReader
lit caractère par caractère
fileInputStream
lit octet par octet