ファイルのバイト入力および出力ストリームの読み取りおよび書き込みメソッドは、バイト配列を使用してデータの読み取りおよび書き込み、つまりバイト単位のデータの処理を行います。したがって、バイト ストリームはUnicode文字では適切に動作しません。たとえば、漢字はファイル内で 2 バイトを占めます。バイト ストリームが使用されている場合、不適切に読み込むと「文字化け」が発生します。
FileInputStream および FileOutputStream バイト ストリームに対応するのは、FileReader および FileWriter 文字ストリーム (ファイル文字入力および出力ストリーム) であり、それぞれ Reader および Writer のサブクラスであり、その構築メソッドは次のとおりです。
FileReader(Stringfilename);FileReader(Filefilename);Fi1eWriter(Stringfilename);FileWriter(Filefilename);FileWriter(Stringfilename,booleanappend);FileWriter(Filefilename,booleanappend);
文字入力ストリームおよび出力ストリームの読み取りおよび書き込みメソッドは、文字配列を使用してデータの読み取りおよび書き込みを行います。つまり、文字を基本単位としてデータを処理します。
例えば:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){FilesourceFile=newFile(a.txt);//読み取られたファイル FiletargetFile=newFile(b.txt);//書き込まれたファイル charc[]=newchar [19 ];//char 配列 try{Writerout=newFileWriter(targetFile,true);//宛先を指す出力ストリーム Readerin=newFileReader(sourceFile);//ソースを指す入力ストリーム intn=-1;while(( n= in.read(c))!=-1){out.write(c,0,n);}out.flush();out.close();}catch(IOExceptione){System.out.println (エラー+e);}}}
注: Writer ストリームの場合、バッファがオーバーフローするたびに、write メソッドは最初にデータをバッファに書き込みます。ストリームが閉じられている場合、バッファの内容はすぐに宛先に書き込まれます。 。ストリームは、flush() メソッドを呼び出して、現在のバッファを即座にフラッシュします。つまり、現在のバッファの内容を宛先に書き込みます。