文件字節(jié)輸入輸出流的read和write方法使用字節(jié)數(shù)組讀寫數(shù)據(jù),即以字節(jié)為單位處理數(shù)據(jù)。因此,字節(jié)流不能很好地操作Unicode字符。比如,一個漢字在文件中占用2個字節(jié),如果使用字節(jié)流,讀取不當(dāng)會出現(xiàn)“亂碼”現(xiàn)象。
與FileInputStream、FileOutputStream字節(jié)流相對應(yīng)的是FileReader、FileWriter字符流(文件字符輸入、輸出流),F(xiàn)ileReader和FileWriter分別是Reader和Writer的子類,其構(gòu)造方法分別是:
FileReader(String filename);FileReader(File filename); Fi1eWriter(String filename);FileWriter(File filename); FileWriter(String filename,boolean append);FileWriter(File filename,boolean append);
字符輸入流和輸出流的read和write方法使用字符數(shù)組讀寫數(shù)據(jù),即以字符為基本單位處理數(shù)據(jù)。
例如:
import java.io.*; public class Main { public static void main(String args[]) { File sourceFile = new File("a.txt"); //讀取的文件 File targetFile = new File("b.txt"); //寫入的文件 char c[] = new char[19]; //char型數(shù)組 try { Writer out = new FileWriter(targetFile,true); //指向目的地的輸出流 Reader in = new FileReader(sourceFile); //指向源的輸入流 int n = -1; while((n = in.read(c)) !=-1) { out.write(c,0,n); } out.flush(); out.close(); } catch(IOException e) { System.out.println("Error"+e); } } }
注意:對于Writer流,write方法將數(shù)據(jù)首先寫入到緩沖區(qū),每當(dāng)緩沖區(qū)溢出時,緩沖區(qū)的內(nèi)容被自動寫入到目的地,如果關(guān)閉流,緩沖區(qū)的內(nèi)容會立刻被寫入到目的地。流調(diào)用flush()方法可以立刻沖洗當(dāng)前緩沖區(qū),即將當(dāng)前緩沖區(qū)的內(nèi)容寫入到目的地。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程