Java IO筆記(FileReader/FileWriter)


(最近剛來到簡書平臺殊霞,以前在CSDN上寫的一些東西,也在逐漸的移到這兒來帅掘,有些篇幅是很早的時候?qū)懴碌奈海虼丝赡軙吹揭恍﹥?nèi)容雜亂的文章,對此深感抱歉修档,以下為正文)


正文

本篇講述的Java IO包中的FileReader和FileWriter類碧绞。它們的功能與前面講過的FileInputStream和FileOutputStream類基本類似,只是前者是基于字符流后者是基于字節(jié)流吱窝,它們都能從文件中讀取或者寫入數(shù)據(jù)讥邻,下面先貼上源碼進行簡單的分析。
FileReader.java

package java.io;
 
public class FileReader extends InputStreamReader {
 
   /**
    * 一個帶一個參數(shù)的構(gòu)造方法院峡,傳入的參數(shù)為一個String類型數(shù)據(jù)兴使,是想要打開文件的路徑名。內(nèi)部實質(zhì)是調(diào)用InputStreamReader對應的構(gòu)造函數(shù)撕予。
    */
    public FileReader(String fileName) throws FileNotFoundException {
        super(new FileInputStream(fileName));
    }
 
   /**
    * 一個帶一個參數(shù)的構(gòu)造方法鲫惶,傳入的參數(shù)為一個File類型數(shù)據(jù),為想要打開文件的File對象实抡。內(nèi)部實質(zhì)是調(diào)用InputStreamReader對應的構(gòu)造函數(shù)欠母。
    */
    public FileReader(File file) throws FileNotFoundException {
        super(new FileInputStream(file));
    }
 
   /**
    * 一個帶一個參數(shù)的構(gòu)造方法欢策,傳入的參數(shù)為一個FilerDsecriptor對象,為想要打開文件的文件描述符赏淌。內(nèi)部實質(zhì)是調(diào)用InputStreamReader對應的構(gòu)
    * 造函數(shù)踩寇。
    */
    public FileReader(FileDescriptor fd) {
        super(new FileInputStream(fd));
    }
 
}

FileWriter.java

package java.io;
 
public class FileWriter extends OutputStreamWriter {
 
    /**
     * 一個帶一個參數(shù)的構(gòu)造方法,傳入的參數(shù)為一個String類型數(shù)據(jù)六水,為想要寫入的文件路徑名俺孙。內(nèi)部實質(zhì)是調(diào)用OutputStreamWriter對應的構(gòu)造方法。
     */
    public FileWriter(String fileName) throws IOException {
        super(new FileOutputStream(fileName));
    }
 
    /**
     * 一個帶兩個參數(shù)的構(gòu)造方法掷贾,第一個參數(shù)為一個String類型參數(shù)睛榄,表示要寫入的文件路徑名,第二個參數(shù)為一個boolean類型數(shù)據(jù)想帅,表示打開寫入文
     * 件時是以覆蓋的模式向文件中寫入數(shù)據(jù)還是以追加的方式向文件寫入文件(true是追加场靴,false為覆蓋)。內(nèi)部實質(zhì)是調(diào)用OutputSteramWriter對應
     * 的構(gòu)造函數(shù)港准。
     */
    public FileWriter(String fileName, boolean append) throws IOException {
        super(new FileOutputStream(fileName, append));
    }
 
    /**
     * 一個帶一個參數(shù)的構(gòu)造方法旨剥,傳入的參數(shù)為要寫入文件的File對象。內(nèi)部實質(zhì)是調(diào)用OuputStreamWriter對應的構(gòu)造函數(shù)浅缸。
     */
    public FileWriter(File file) throws IOException {
        super(new FileOutputStream(file));
    }
 
    /**
     * 一個帶兩個參數(shù)的構(gòu)造方法轨帜,第一個參數(shù)為要寫入文件的File對象,第二個參數(shù)是一個boolean類型數(shù)據(jù)衩椒,表示打開寫入文件時是以覆蓋的模式向文
     * 件中寫入數(shù)據(jù)還是以追加的方式向文件中寫入文件(true是追加蚌父,false為覆蓋)。內(nèi)部實質(zhì)是調(diào)用OututStreamWriter對應的構(gòu)造函數(shù)烟具。
     */
    public FileWriter(File file, boolean append) throws IOException {
        super(new FileOutputStream(file, append));
    }
 
    /**
     * 一個帶一個參數(shù)的構(gòu)造方法梢什,傳入的參數(shù)為要打開文件的文件描述符對象。內(nèi)部實質(zhì)是調(diào)用OutputStream對應的構(gòu)造函數(shù)朝聋。
     */
    public FileWriter(FileDescriptor fd) {
        super(new FileOutputStream(fd));
    }
 
}

通過對源碼的簡單學習,我們可以看出FileReader和FileWriter中并沒有實現(xiàn)一些特殊的讀寫方法囤躁,甚至于它們的源碼中只包含了不同的構(gòu)造方法冀痕,這表明了它們的讀寫方法都是依賴于FileInputStream/FileOutputStream來實現(xiàn)的,F(xiàn)ileReader/FileWriter更多的只是起到將字節(jié)流轉(zhuǎn)化成字符流的工作狸演。

下面通過一個簡單的小例子來展示這兩個類的使用方法:

package FileInputOutput;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class FileIOTest1 {
    public static void main(String[] args) {
        char[] buffer = new char[1024];
        try (FileReader fr = new FileReader(new File("./src/file/test.txt"));
                FileWriter fw = new FileWriter(new File(
                        "./src/file/testcopy3.txt"))) {
            int len;
            while ((len = fr.read(buffer)) != -1) {
                fw.write(buffer,0,len);
            }
            System.out.println("復制完成");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

從示例代碼中可以看出言蛇,F(xiàn)ileReader/FileWriter跟前面講的FileInputStream/FilerOutputStream的使用方法基本完全一致,位移的區(qū)別就是提供的緩存數(shù)組前者是字符數(shù)組后者是字節(jié)數(shù)組宵距。
以上為本篇的全部內(nèi)容腊尚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市满哪,隨后出現(xiàn)的幾起案子婿斥,更是在濱河造成了極大的恐慌劝篷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民宿,死亡現(xiàn)場離奇詭異娇妓,居然都是意外死亡,警方通過查閱死者的電腦和手機活鹰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門哈恰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人志群,你說我怎么就攤上這事着绷。” “怎么了锌云?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵蓬戚,是天一觀的道長。 經(jīng)常有香客問我宾抓,道長子漩,這世上最難降的妖魔是什么莺禁? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任支救,我火速辦了婚禮,結(jié)果婚禮上洁仗,老公的妹妹穿的比我還像新娘讲衫。我一直安慰自己缕棵,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布涉兽。 她就那樣靜靜地躺著招驴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枷畏。 梳的紋絲不亂的頭發(fā)上别厘,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音拥诡,去河邊找鬼触趴。 笑死,一個胖子當著我的面吹牛渴肉,可吹牛的內(nèi)容都是我干的冗懦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仇祭,長吁一口氣:“原來是場噩夢啊……” “哼披蕉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤没讲,失蹤者是張志新(化名)和其女友劉穎眯娱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體食零,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡困乒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贰谣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜搂。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吱抚,靈堂內(nèi)的尸體忽然破棺而出百宇,到底是詐尸還是另有隱情,我是刑警寧澤秘豹,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布携御,位于F島的核電站,受9級特大地震影響既绕,放射性物質(zhì)發(fā)生泄漏啄刹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一凄贩、第九天 我趴在偏房一處隱蔽的房頂上張望誓军。 院中可真熱鬧,春花似錦疲扎、人聲如沸昵时。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壹甥。三九已至,卻和暖如春壶熏,著一層夾襖步出監(jiān)牢的瞬間句柠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工久橙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俄占,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓淆衷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渤弛。 傳聞我的和親對象是個殘疾皇子祝拯,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容