Os métodos de leitura e gravação do fluxo de entrada e saída de bytes do arquivo usam matrizes de bytes para ler e gravar dados, ou seja, para processar dados em bytes. Portanto, os fluxos de bytes não funcionam bem com caracteres Unicode . Por exemplo, um caractere chinês ocupa 2 bytes no arquivo. Se um fluxo de bytes for usado, "caracteres distorcidos" aparecerão se forem lidos incorretamente.
Correspondendo aos fluxos de bytes FileInputStream e FileOutputStream estão os fluxos de caracteres FileReader e FileWriter (fluxos de entrada e saída de caracteres de arquivo FileReader e FileWriter são subclasses de Reader e Writer respectivamente, e seus métodos de construção são:
FileReader(Stringfilename);FileReader(Filefilename);Fi1eWriter(Stringfilename);FileWriter(Filefilename);FileWriter(Stringfilename,booleanappend);FileWriter(Filefilename,booleanappend);
Os métodos de leitura e gravação de fluxos de entrada e saída de caracteres usam matrizes de caracteres para ler e gravar dados, ou seja, para processar dados com caracteres como unidade básica.
Por exemplo:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){FilesourceFile=newFile(a.txt);//O arquivo lido FiletargetFile=newFile(b.txt);//O arquivo escrito charc[]=newchar [19 ];//array char try{Writerout=newFileWriter(targetFile,true);//fluxo de saída apontando para o destino Readerin=newFileReader(sourceFile);//fluxo de entrada apontando para a fonte intn=-1;while(( n= in.read(c))!=-1){out.write(c,0,n);}out.flush();out.close();}catch(IOExceptione){System.out.println (Erro +e);}}}
Nota : Para fluxos do Writer, o método write primeiro grava os dados no buffer. Sempre que o buffer transborda, o conteúdo do buffer é gravado automaticamente no destino. Se o fluxo for fechado, o conteúdo do buffer será gravado imediatamente no destino. . O fluxo chama o método flush() para liberar imediatamente o buffer atual, ou seja, para gravar o conteúdo do buffer atual no destino.