Java IO流之規(guī)律總結(jié)

字符流:

  • Reader: 用于讀取字符流的抽象類痒谴。子類必須實現(xiàn)的方法只有 read(char[], int, int) 和 close()癣籽。
    • |---BufferedReader :從字符輸入流中讀取文本,緩沖各個字符法希,從而實現(xiàn)字符瑰煎、數(shù)組和行的高效讀取莉御。 可以指定緩沖區(qū)的大小,或者可使用默認的大小匙奴。大多數(shù)情況下堆巧,默認值就足夠大了。

    • |---LineNumberReader :跟蹤行號的緩沖字符輸入流泼菌。此類定義了方法 setLineNumber(int) 和getLineNumber()谍肤,它們可分別用于設(shè)置和獲取當前行號。

    • |---InputStreamReader :是字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符哗伯。它使用的字符集可以由名稱指定或顯式給定荒揣,或者可以接受平臺默認的字符集。

    • |---FileReader: :用來讀取字符文件的便捷類焊刹。此類的構(gòu)造方法假定默認字符編碼和默認字節(jié)緩沖區(qū)大小
      都是適當?shù)南等巍R约褐付ㄟ@些值,可以先在 FileInputStream 上構(gòu)造一個InputStreamReader虐块。

  • |---CharArrayReade
  • |---StringReader

  • Writer: 寫入字符流的抽象類俩滥。子類必須實現(xiàn)的方法僅有 write(char[], int, int)、flush() 和 close()非凌。
  • |---BufferedWriter: :將文本寫入字符輸出流举农,緩沖各個字符,從而提供單個字符敞嗡、數(shù)組和字符串的高效寫入颁糟。
  • |---OutputStreamWriter :是字符流通向字節(jié)流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節(jié)。它使用的字符集可以由名稱指定或顯式給定喉悴,否則將接受平臺默認的字符集棱貌。
  • |---FileWriter: :用來寫入字符文件的便捷類。此類的構(gòu)造方法假定默認字符編碼和默認字節(jié)緩沖區(qū)大小都是可接受的箕肃。要自己指定這些值婚脱,可以先在 FileOutputStream 上構(gòu)造一個 OutputStreamWriter。
  • |---PrintWrite
  • |---CharArrayWriter
  • |---StringWriter

字 節(jié) 流:

  • InputStream: 是表示字節(jié)輸入流的所有類的超類。
    • |--- FileInputStream: :從文件系統(tǒng)中的某個文件中獲得輸入字節(jié)障贸。哪些文件可用取決于主機環(huán)境错森。FileInputStream 用于讀取諸如圖像數(shù)據(jù)之類的原始字節(jié)流。要讀取字符流篮洁,請考慮使用 FileReader涩维。
  • |--- FilterInputStream: :包含其他一些輸入流,它將這些流用作其基本數(shù)據(jù)源袁波,它可以直接傳輸數(shù)據(jù)或提供一些額外的功能瓦阐。
  • |--- BufferedInputStream :該類實現(xiàn)緩沖的輸入流。
  • |--- Stream :
  • |--- ObjectInputStream :
  • |--- PipedInputStream

  • OutputStream:此抽象類是表示輸出字節(jié)流的所有類的超類篷牌。
  • |--- FileOutputStream :文件輸出流是用于將數(shù)據(jù)寫入 File 或 FileDescriptor 的輸出流睡蟋。
  • |--- FilterOutputStream :此類是過濾輸出流的所有類的超類。
  • |--- BufferedOutputStream :該類實現(xiàn)緩沖的輸出流枷颊。
  • |--- PrintStream :
  • |--- DataOutputStream :
  • |--- ObjectOutputStream :
  • |--- PipedOutputStream:

規(guī)律總結(jié)

IO流中的對象:其實很簡單戳杀,就是讀取和寫入。但是因為功能的不同偷卧,流的體系中提供 N 多的對象豺瘤。那么開始時,到
底該用哪個對象更為合適呢听诸?這就需要明確流的操作規(guī)律坐求。

1 ,明確源和目的晌梨。

  • 數(shù)據(jù)源:就是需要讀取桥嗤,可以使用兩個體系:InputStream、Reader仔蝌;
  • 數(shù)據(jù)匯:就是需要寫入泛领,可以使用兩個體系:OutputStream、Writer敛惊;

2 渊鞋,操作的數(shù)據(jù)是否是純文本數(shù)據(jù)?

  • 如果是:數(shù)據(jù)源:Reader 數(shù)據(jù)匯:Writer
  • 如果不是:數(shù)據(jù)源:InputStream 數(shù)據(jù)匯:OutputStream

3 瞧挤,雖然確定了一個體系锡宋,但是該體系中有太多的對象,到底用哪個呢特恬?明確操作的數(shù)據(jù)設(shè)備执俩。

  • 數(shù)據(jù)源對應(yīng)的設(shè)備:硬盤(File),內(nèi)存(數(shù)組)癌刽,鍵盤(System.in)
  • 數(shù)據(jù)匯對應(yīng)的設(shè)備:硬盤(File)役首,內(nèi)存(數(shù)組)尝丐,控制臺(System.out)。

4 衡奥,需要在基本操作上附加其他功能嗎爹袁?比如緩沖。

  • 如果需要就進行裝飾矮固。

根據(jù)規(guī)律實例化演示

需求:讀取鍵盤錄入呢簸,將數(shù)據(jù)存儲到一個文件中。

規(guī)律分析

1乏屯,明確體系:

  • 源:InputStream ,Reader
  • 目的:OutputStream 瘦赫,Writer

2辰晕,明確數(shù)據(jù):

  • 源:是純文本嗎?是 Reader
  • 目的确虱;是純文本嗎含友?是 Writer

3,明確設(shè)備:

  • 源:鍵盤校辩,System.in
  • 目的:硬盤窘问,F(xiàn)ileWriter
  • InputStream in = System.in;
  • FileWriter fw = new FileWriter("a.txt");

4,需要額外功能嗎宜咒?

  • 需要惠赫,因為源明確的體系時Reader」屎冢可是源的設(shè)備是System.in儿咱。所以為了方便于操作文本數(shù)據(jù),將源轉(zhuǎn)成字符流场晶。需要轉(zhuǎn)換流混埠。
  • InputStreamReader InputStreamReader isr = new InputStreamReader(System.in);
    FileWriter fw = new FileWriter("a.txt");
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));

代碼實現(xiàn)


    /**
     * 通過鍵盤錄入文字輸出到文件
     */
    public static void test3() {
        BufferedWriter bufferedWriter = null;
        BufferedReader bufferedReader = null;

        try {
            bufferedWriter = new BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream(
                                    "E:\\kejiang\\IdeaProjects\\JavaProjectTest\\src\\io\\SystemOut.txt"),"UTF-8"));
            bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            String s = "";
            while ((s = bufferedReader.readLine()) != null) {
                if ("over".equals(s)) {
                    break;
                }
                bufferedWriter.write(s.toUpperCase());
                bufferedWriter.newLine();
                bufferedWriter.flush();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedWriter.close();
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

運行效果

  • 控制臺
這是通過鍵盤錄入的數(shù)據(jù)
測試一下

over

Process finished with exit code 0

  • 輸出的文件


    這里寫圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市诗轻,隨后出現(xiàn)的幾起案子钳宪,更是在濱河造成了極大的恐慌,老刑警劉巖扳炬,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吏颖,死亡現(xiàn)場離奇詭異,居然都是意外死亡鞠柄,警方通過查閱死者的電腦和手機侦高,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厌杜,“玉大人奉呛,你說我怎么就攤上這事计螺。” “怎么了瞧壮?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵登馒,是天一觀的道長。 經(jīng)常有香客問我咆槽,道長陈轿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任秦忿,我火速辦了婚禮麦射,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灯谣。我一直安慰自己潜秋,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布胎许。 她就那樣靜靜地躺著峻呛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辜窑。 梳的紋絲不亂的頭發(fā)上钩述,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音穆碎,去河邊找鬼牙勘。 笑死,一個胖子當著我的面吹牛所禀,可吹牛的內(nèi)容都是我干的谜悟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼北秽,長吁一口氣:“原來是場噩夢啊……” “哼葡幸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贺氓,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔚叨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辙培,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔑水,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年扬蕊,在試婚紗的時候發(fā)現(xiàn)自己被綠了搀别。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡尾抑,死狀恐怖歇父,靈堂內(nèi)的尸體忽然破棺而出蒂培,到底是詐尸還是另有隱情,我是刑警寧澤榜苫,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布护戳,位于F島的核電站,受9級特大地震影響垂睬,放射性物質(zhì)發(fā)生泄漏媳荒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一驹饺、第九天 我趴在偏房一處隱蔽的房頂上張望钳枕。 院中可真熱鬧,春花似錦赏壹、人聲如沸么伯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俐巴,卻和暖如春骨望,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欣舵。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工擎鸠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缘圈。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓劣光,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糟把。 傳聞我的和親對象是個殘疾皇子绢涡,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 概述: 1、IO流:即Input Output的縮寫遣疯。 2雄可、特點:1)IO流用來處理設(shè)備間的數(shù)據(jù)傳輸。2)Java...
    玉圣閱讀 1,253評論 0 3
  • tags:io categories:總結(jié) date: 2017-03-28 22:49:50 不僅僅在JAVA領(lǐng)...
    行徑行閱讀 2,178評論 0 3
  • 一缠犀、IO流整體結(jié)構(gòu)圖 流是一組有順序的数苫,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象辨液。即數(shù)據(jù)在兩設(shè)備間的傳輸稱...
    慕凌峰閱讀 1,158評論 0 12
  • 摘要 Java I/O是Java技術(shù)體系中非撑凹保基礎(chǔ)的部分,它是學習Java NIO的基礎(chǔ)滔迈。而深入理解Java NI...
    biakia閱讀 7,600評論 7 81
  • 很早就看到微博上很多人推薦這本書止吁,發(fā)這本書的思維導(dǎo)圖被辑,當然這類書都大同小異,但我個人觀點赏殃,一本書里有一兩個自己未知...
    老解閱讀 567評論 0 0