Buffered|FileReader|FileWriter

1.輸出字符流:BufferedWriter

----------| Writer 所有輸出字符流的基類棠笑, 抽象類构订。
--------------- | FileWriter 向文件輸出字符數(shù)據(jù)的輸出字符流。
----------------| BufferedWriter 緩沖輸出字符流 緩沖輸出字符流作用: 提高FileWriter的寫數(shù)據(jù)效率與拓展FileWriter的功能妒茬。
BufferedWriter內(nèi)部只不過是提供了一個(gè)8192長(zhǎng)度的字符數(shù)組作為緩沖區(qū)而已束倍,拓展了FileWriter的功能。

BufferedWriter如何使用乱顾?
1. 找到目標(biāo)文件
2. 建立數(shù)據(jù)的輸出通道

package cn.itcast.buffered;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Demo2 {

    public static void main(String[] args) throws IOException {
        //找到目標(biāo)文件
        File file = new File("F:\\a.txt");
        //建立數(shù)據(jù)的輸出通道
        FileWriter fileWriter = new FileWriter(file,true);
        //建立緩沖輸出流對(duì)象
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 
        //寫出數(shù)據(jù)
//      bufferedWriter.newLine(); //newLine() 換行板祝。 實(shí)際上就是想文件輸出\r\n.
        bufferedWriter.write("\r\n");
        bufferedWriter.write("前兩天李克強(qiáng)來蘿崗!走净!");
        //關(guān)閉資源
        bufferedWriter.flush();
//      bufferedWriter.close(); 
    }
}

2.輸入字符流: BufferedReader

-------| Reader 所有輸入字符流的基類扔字。 抽象類
----------| FileReader 讀取文件字符串的輸入字符流。
----------| BufferedReader 緩沖輸入字符流 温技。 緩沖 輸入字符流出現(xiàn)的目的是為了提高讀取文件 的效率和拓展了FileReader的功能革为。 其實(shí)該類內(nèi)部也是維護(hù)了一個(gè)字符數(shù)組

記住:緩沖流都不具備讀寫文件的能力舵鳞。

BufferedReader的使用步驟:
1.找到目標(biāo)文件
2 .建立數(shù)據(jù)的輸入通道震檩。

package cn.itcast.buffered;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class Demo1 {

    public static void main(String[] args) throws IOException {
//       readTest1();
        File file  = new File("F:\\1208project\\day21\\src\\cn\\itcast\\buffered\\Demo1.java");
        //建立數(shù)據(jù)的輸入通道。
        FileReader fileReader = new FileReader(file);
        String line =  null;
        
        while((line = myReadLine(fileReader))!=null){
            System.out.println(line);
        }
    }
    //自己去實(shí)現(xiàn)readLine方法蜓堕。
    public static String myReadLine(FileReader fileReader) throws IOException{
        //創(chuàng)建一個(gè)字符串緩沖類對(duì)象
        StringBuilder sb = new StringBuilder();  //StringBuilder主要是用于存儲(chǔ)讀取到的數(shù)據(jù)
        int content = 0 ;
        while((content = fileReader.read())!=-1){
            if(content=='\r'){
                continue;
            }else if(content=='\n'){
                break;
            }else{
                //普通字符
                sb.append((char)content);
            }
        }
        //代表已經(jīng)讀取完畢了抛虏。
        if(content ==-1){
            return null;
        }
        
        return sb.toString();  
    }
    public static void readTest1() throws IOException{
        //找到目標(biāo)文件
        File file  = new File("F:\\a.txt");
        //建立數(shù)據(jù)的輸入通道。
        FileReader fileReader = new FileReader(file);
        //建立緩沖輸入字符流
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        //讀取數(shù)據(jù)
        /*int content = bufferedReader.read();  //讀到了一個(gè)字符套才。 讀取到的字符肯定也是從Bufferedreader內(nèi)部的字符數(shù)組中獲取的到迂猴。所以效率高。
        System.out.println((char)content);*/
        //使用BUfferedReader拓展的功能背伴,readLine()  一次讀取一行文本沸毁,如果讀到了文件的末尾返回null表示。
        String line =  null;
        while((line = bufferedReader.readLine())!=null){ // 雖然readLine每次讀取一行數(shù)據(jù)傻寂,但是但會(huì)的line是不包含\r\n的息尺、
            System.out.println(Arrays.toString("aaa".getBytes()));
        }
        //關(guān)閉資源
        bufferedReader.close(); 
    }
}

3.輸入字符流FileReader

字節(jié)流:字節(jié)流讀取的是文件中的二進(jìn)制數(shù)據(jù),讀到的數(shù)據(jù)并不會(huì)幫你轉(zhuǎn)換成你看得懂的字符疾掰。

字符流: 字符流會(huì)把讀取到的二進(jìn)制的數(shù)據(jù)進(jìn)行對(duì)應(yīng) 的編碼與解碼工作搂誉。 字符流 = 字節(jié)流 + 編碼(解碼)

輸入字符流:
----------| Reader 輸入字符流的基類 抽象類
-------------| FileReader 讀取文件的輸入字符流。

FileReader的用法:
1. 找到目標(biāo)文件
2. 建立數(shù)據(jù)的輸入通道
3. 讀取數(shù)據(jù)
4. 關(guān)閉資源

package cn.itcast.reader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo2 {

    public static void main(String[] args) throws IOException {
        readTest2();
    }
    
    //使用緩沖字符數(shù)組讀取文件静檬。
    public static void readTest2() throws IOException{
        //找到目標(biāo)文件
        File file = new File("F:\\1208project\\day21\\src\\day21\\Demo1.java");
        // 建立數(shù)據(jù)的輸入通道
        FileReader fileReader = new FileReader(file);
        //建立緩沖字符數(shù)組讀取文件數(shù)據(jù)
        char[] buf = new char[1024];
        int length = 0 ; 
        while((length = fileReader.read(buf))!=-1){
            System.out.print(new String(buf,0,length));
        }
    }
    public static void readTest1() throws IOException{
        //找到目標(biāo)文件
        File file = new File("F:\\1208project\\day21\\src\\day21\\Demo1.java");
        //建立數(shù)據(jù)的輸入通道
        FileReader fileReader = new FileReader(file);
        int content = 0 ;
        while((content = fileReader.read())!=-1){ //每次只會(huì)讀取一個(gè)字符炭懊,效率低。
            System.out.print((char)content);
        }
        //關(guān)閉資源
        fileReader.close();
    }
}

4.FileWriter輸出字符流:

------| Writer 輸出字符流的基類拂檩。 抽象類
-----------| FileWriter 向文件數(shù)據(jù)數(shù)據(jù)的輸出字符流

FileWriter的使用步驟:
1. 找到目標(biāo)文件侮腹。
2. 建立數(shù)據(jù)輸出通道
3. 寫出數(shù)據(jù)。
4. 關(guān)閉資源

FileWriter要注意的事項(xiàng):
1. 使用FileWriter寫數(shù)據(jù)的時(shí)候广恢,F(xiàn)ileWriter內(nèi)部是維護(hù)了一個(gè)1024個(gè)字符數(shù)組的凯旋,寫數(shù)據(jù)的時(shí)候會(huì)先寫入到它內(nèi)部維護(hù)的字符數(shù)組中,如果需要
把數(shù)據(jù)真正寫到硬盤上,需要調(diào)用flush或者是close方法或者是填滿了內(nèi)部的字符數(shù)組至非。
2. 使用FileWriter的時(shí)候钠署,如果目標(biāo)文件不存在,那么會(huì)自動(dòng)創(chuàng)建目標(biāo)文件荒椭。
3.使用FileWriter的時(shí)候谐鼎, 如果目標(biāo)文件已經(jīng)存在了,那么默認(rèn)情況會(huì)先情況文件中的數(shù)據(jù)趣惠,然后再寫入數(shù)據(jù) 狸棍, 如果需要在原來的基礎(chǔ)上追加數(shù)據(jù),
需要使用“new FileWriter(File , boolean)”的構(gòu)造方法味悄,第二參數(shù)為true草戈。

package cn.itcast.writer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Demo1 {

    public static void main(String[] args) throws IOException {
        writeTest1();
    }
    public static void  writeTest1() throws IOException{
        //找到目標(biāo)文件
        File file = new File("F:\\a.txt");
        //建立數(shù)據(jù)輸出通道
        FileWriter fileWriter = new FileWriter(file,true);
        //準(zhǔn)備數(shù)據(jù),把數(shù)據(jù)寫出
        String data = "今天天氣非常好J躺唐片!";
        fileWriter.write(data);  //字符流具備解碼的功能。
        //刷新字符流
//      fileWriter.flush();
        //關(guān)閉資源
        fileWriter.close(); 
    }
}

練習(xí): 使用字符流拷貝一個(gè)文本文件(java文件).

package cn.itcast.writer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//使用字符流拷貝文件
public class Copy {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("F:\\Test.txt"));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\Test.exe"));
        String line=null;
        while((line = bufferedReader.readLine())!=null){
        bufferedWriter.write(line);
        }
        bufferedWriter.close();
        bufferedReader.close();
    }
}

5.何時(shí)使用字符流涨颜,何時(shí)使用字節(jié)流费韭?依據(jù)是什么?

使用字符流的應(yīng)用場(chǎng)景: 如果是讀寫字符數(shù)據(jù)的時(shí)候則使用字符流庭瑰。

使用字節(jié)流的應(yīng)用場(chǎng)景: 如果讀寫的數(shù)據(jù)都不需要轉(zhuǎn)換成字符的時(shí)候星持,則使用字節(jié)流。

使用字符流拷貝圖片出現(xiàn) 的問題.png

使用字符流拷貝圖片出現(xiàn) 的問題.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弹灭,一起剝皮案震驚了整個(gè)濱河市督暂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鲤屡,老刑警劉巖损痰,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異酒来,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肪凛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門堰汉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伟墙,你說我怎么就攤上這事翘鸭。” “怎么了戳葵?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵就乓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)生蚁,這世上最難降的妖魔是什么噩翠? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮邦投,結(jié)果婚禮上伤锚,老公的妹妹穿的比我還像新娘。我一直安慰自己志衣,他們只是感情好屯援,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著念脯,像睡著了一般狞洋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绿店,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天吉懊,我揣著相機(jī)與錄音,去河邊找鬼惯吕。 笑死惕它,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的废登。 我是一名探鬼主播淹魄,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼堡距!你這毒婦竟也來了甲锡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤羽戒,失蹤者是張志新(化名)和其女友劉穎缤沦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體易稠,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缸废,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驶社。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片企量。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亡电,靈堂內(nèi)的尸體忽然破棺而出届巩,到底是詐尸還是另有隱情,我是刑警寧澤份乒,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布恕汇,位于F島的核電站腕唧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瘾英。R本人自食惡果不足惜枣接,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望方咆。 院中可真熱鬧月腋,春花似錦、人聲如沸瓣赂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煌集。三九已至妓肢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苫纤,已是汗流浹背碉钠。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卷拘,地道東北人喊废。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栗弟,于是被迫代替她去往敵國和親污筷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359