檔案位元組輸入輸出流的read和write方法使用位元組數組讀寫數據,即以位元組為單位處理數據。因此,位元組流不能很好地操作Unicode字元。例如,一個漢字在檔案中佔用2個位元組,如果使用位元組流,讀取不當會出現「亂碼」現象。
與FileInputStream、FileOutputStream位元組流相對應的是FileReader、FileWriter字元流(檔案字元輸入、輸出流),FileReader和FileWriter分別是Reader和Writer的子類,其建構方法分別是:
FileReader(Stringfilename);FileReader(Filefilename);Fi1eWriter(Stringfilename);FileWriter(Filefilename);FileWriter(Stringfilename,booleanappend);FileWriter(Filefilename,booleanappend);
字元輸入流和輸出流的read和write方法使用字元數組讀寫數據,即以字元為基本單位處理資料。
例如:
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 (Error+e);}}}
注意:對於Writer流,write方法將資料先寫入到緩衝區,每當緩衝區溢位時,緩衝區的內容會自動寫入到目的地,如果關閉流,緩衝區的內容會立刻被寫入到目的地。串流呼叫flush()方法可以立刻沖洗目前緩衝區,即將目前緩衝區的內容寫入到目的地。