java IO詳解

記錄下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)師必備

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • IO概覽 字節(jié)流與字符流的區(qū)別字節(jié)流在操作時(shí)本身不會(huì)用到緩沖區(qū)(內(nèi)存),是文件本身直接操作的,而字符流在操作時(shí)使用...
    Sophie12138閱讀 806評(píng)論 0 0
  • 概述 java.io 包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標(biāo)。java.io ...
    Steven1997閱讀 9,425評(píng)論 1 25
  • 1. Java中字節(jié)流和字符流 字節(jié)(Byte)和字符(Character)的大?。?1 byte = 8bit[...
    thorhill閱讀 672評(píng)論 0 2
  • 這是java io 比較基本的一些處理流,除此之外我們還會(huì)提到一些比較深入的基于io的處理類,比如console類...
    國(guó)祥同學(xué)閱讀 972評(píng)論 0 2
  • 1 Java IO流的概念,分類 1.1 Java IO流的概念 java的IO是實(shí)現(xiàn)輸入和輸出的基礎(chǔ),可以方便的...
    _fatef閱讀 1,826評(píng)論 2 4

友情鏈接更多精彩內(nèi)容