記錄下Io中的printWriter(打印字符),io中的類太多,在這里記錄下,初學(xué)者,水平有限,寫(xiě)錯(cuò)勿怪
在需要打印字符而不是字節(jié)流,使用PrintWriter
查看API發(fā)現(xiàn)構(gòu)造方法被重載多次,但是都沒(méi)有自動(dòng)刷新緩沖功能
public PrintWrtier(File filename){
}
public PrintWrtier(File filename,String csn){
}
public PrintWrtier(String strname){
}
public PrintWrtier(String strname,String csn){
}
查看文檔發(fā)現(xiàn)其實(shí)該方法其實(shí)內(nèi)部是使用了this關(guān)鍵字調(diào)用了BufferWriter的構(gòu)造方法,使用默認(rèn)平臺(tái)編碼將字符流解碼成字節(jié)。
public PrintWriter(File file) throws FileNotFoundException {
? ? this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),false);
}
PrintWriter:沒(méi)有提供字符集。
BufferedWriter: 提供了一個(gè)默認(rèn)大小的字符緩沖區(qū),沒(méi)有提供默認(rèn)的字符集。
如果不使用緩沖,通過(guò)OutputStreamWriter使用平臺(tái)的默認(rèn)的字符編碼將字符解碼成字節(jié),然后直接就寫(xiě)入,效果低下。
如果使用了緩沖,通過(guò)OutputStreamWriter使用平臺(tái)的默認(rèn)的字符編碼將字符解碼成字節(jié)放在默認(rèn)大小的緩沖區(qū)中,然后在寫(xiě)入。BufferedWriter 并不能將字符解碼字節(jié),是靠其OutputStreamWriter使用平臺(tái)默認(rèn)字符集將字符解碼成字節(jié)。
OutputStreamWriter:提供了字符集,將緩沖流中的字符使用默認(rèn)的字符集解碼成字節(jié),解碼也可以理解成轉(zhuǎn)化,轉(zhuǎn)化字符流或者解碼字符流,是字符到字節(jié)的一個(gè)橋梁。
File | String都是表示一個(gè)文件。
PrintWriter中有一個(gè)刷新緩沖,刷新的緩沖是BufferedWriter。
真正提供字符集和解碼字節(jié)的其實(shí)是OutputStreamWriter。
FileWriter:是個(gè)字符便捷類,調(diào)用了父類中的構(gòu)造方法,參數(shù)也是先傳遞給父類,自己沒(méi)有任何操作,這也是為什么沒(méi)有自己的子類方法,只是將名字縮短了,其功能是父類的,也是為什么叫做便捷類的原因。
FileWriter fw=new File(filename);
//等同于outputStreamWriter;
OutputStreamWriter osw=new OutputStream(new FileOutputStream(filename));
以下三個(gè)都是差不多的都是使用默認(rèn)緩沖大小和默認(rèn)平臺(tái)字符集將字符解碼成字節(jié)
PrintWriter pw = new PrintWriter(filenname);//1
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename)));//2
BufferedWriter bww = new BufferedWriter(new FileWriter(filename))//3
Buffered子類中的方法
writer(int c);//寫(xiě)入單個(gè)字符
write(String str ,int start ,int end );將該字符串中的一部分?jǐn)?shù)據(jù)寫(xiě)入到輸出流
write(Char[] c:int start,int end);//將該數(shù)組中的一部分?jǐn)?shù)據(jù)寫(xiě)入到輸出流中
writeNewLine();//將一個(gè)行分隔符寫(xiě)入到輸出流中
//繼承的父類writer方法
write(char[]);//將該數(shù)組中的字節(jié)都寫(xiě)入到輸出流中
write(String str);//將指定的字符串寫(xiě)入到輸出流中
簡(jiǎn)單點(diǎn)就是將單個(gè)字符、數(shù)組、字符串寫(xiě)入到輸出流中
拿一段文字示范下
BufferedWriter bw=null;
try {
// 將字符使用默認(rèn)字符集解碼成字節(jié)寫(xiě)入到目標(biāo)文件中
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hello.txt")));
bw.write(" 張三");
bw.newLine();
bw.write("李四");
// 強(qiáng)制清空緩沖區(qū)寫(xiě)入到文件中
bw.flush();
//如果目標(biāo)不是文件,則無(wú)法關(guān)閉該流,或者使用File.exists()判斷是否存在
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群。交流學(xué)習(xí)群號(hào):938837867 暗號(hào):555 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備
e.printStackTrace();
}
使用printWriter,此類中的方法都不會(huì)拋出io異常
try{
//將字符使用默認(rèn)字符集轉(zhuǎn)換成字節(jié)寫(xiě)入到目標(biāo)文件中
PrintWriter pw=new PrintWriter(" hello.txt");
pw.println("張三");
pw.println("李四");
}catch(FileNotFoundException e){
e.printStackTrace();
}finally{
pw.flush();
pw.close();
}
在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流群。交流學(xué)習(xí)群號(hào):938837867 暗號(hào):555 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備