2011-03-01 17 views
31
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(); 

cuando se utiliza el archivo FileReader y FileWriter a leer y escribir mp4 .... archivo output.mp4 no puede traducirse así .... pero cuando se utiliza FileInputStream y FileOutputStream vez funcionó bienFileInputStream vs FileReader

¿puedo concluir que FileReader y escritor son solo para leer y escribir solo texto?

+1

http://download.oracle.com/javase/tutorial/essential/io/charstreams.html – Yaneeve

Respuesta

41

Sí, su conclusión es que las subclases correctas de Reader y Writer son para leer/escribir contenido de texto. InputStream/OutputStream son para contenido binario. Si se echa un vistazo a la documentación:

Reader - Clase abstracta para leer streams de caracteres

InputStream - Clase abstracta es la superclase de todas las clases que representan un flujo de entrada de bytes.

+0

para que pueda leer solo el archivo .txt ... porque el archivo pdf, word también contiene archivos de imagen ... no es – saravanan

+0

@saravanan sí, solo archivos de texto. El pdf y el doc son formatos complicados que necesitan bibliotecas especiales para ser analizados de manera significativa. – Bozho

+0

@Bozho: dónde puedo encontrar estas bibliotecas para usar en mi pgm y creadores de Java tomaron las cosas para crear las secuencias de caracteres solo para leer archivos .txt – saravanan

23

FileReader (y de hecho nada se extiende lector) es de hecho para texto. Desde el documentation of Reader:

clase abstracta para leer streams de caracteres.

(. El énfasis es mío) mira el API y verá que todo que ver con el texto - char en lugar de byte por todo el lugar.

InputStream y OutputStream son para datos binarios, como archivos mp4.

Personalmente, evitaría el FileReader en conjunto, ya que siempre usa la codificación de caracteres predeterminada del sistema. En su lugar, use InputStreamReader alrededor de FileInputStream ... pero solo cuando desee manejar el texto.

Como acotación al margen, que es una manera muy ineficiente de la copia de una entrada a una salida ... utilizar las sobrecargas de read y write la que leen o escriben en una memoria intermedia de - ya sea un byte[] o una char[]. De lo contrario, está llamando a leer y escribir para cada byte/carácter en el archivo.

Debe también cerrar IO en bloques finally para que estén cerrados incluso si se produce una excepción mientras los está procesando.

5

FileInputStream se utiliza para la lectura de flujos de bytes de datos en bruto, como imágenes en bruto. FileReaders, por el contrario, se utilizan para la lectura de los flujos de caracteres

La diferencia entre FileInputStream y FileReader es, FileInputStream lee el byte a byte de archivos y FileReader lee el archivo de carácter por carácter.

Así que cuando usted está tratando de leer el archivo que contenga el carácter "Č", en FileInputStream dará el resultado como 196 140, ya que el valor de ASCIIČ es 268.

En FileReader dará el resultado como 268 que es el valor ASCII del char Č.

0

Un archivo de texto se puede leer utilizando tanto fileReader y fileInputStream pero mp3 y png sólo se pueden leer usando fileInputStream

  1. fileReader lee carbón por carbón

  2. fileInputStream lee byte a byte

Cuestiones relacionadas