Java基礎筆記21

21.01_IO流(字符流FileReader)

  • 1.字符流是什么
    • 字符流是可以直接讀寫字符的IO流
    • 字符流讀取字符, 就要先讀取到字節(jié)數(shù)據(jù), 然后轉為字符. 如果要寫出字符, 需要把字符轉為字節(jié)再寫出.
  • 2.FileReader, FileWriter
    • FileReader類的read()方法可以按照字符大小讀取
  •   FileReader fr = new FileReader("aaa.txt");              //創(chuàng)建輸入流對象,關聯(lián)aaa.txt
      int ch;
      while((ch = fr.read()) != -1) {                         //將讀到的字符賦值給ch
          System.out.println((char)ch);                       //將讀到的字符強轉后打印
      }
      
      fr.close();                                             //關流 
    
    • FileWriter類的write()方法可以自動把字符轉為字節(jié)寫出

21.02_IO流(字符流FileWriter)

  • FileWriter類的write()方法可以自動把字符轉為字節(jié)寫出

      FileWriter fw = new FileWriter("aaa.txt");
      fw.write("aaa");
      fw.close();
    

21.03_IO流(字符流的拷貝)

FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");

int ch;
while((ch = fr.read()) != -1) {
    fw.write(ch);
}

fr.close();
fw.close();

21.04_IO流(什么情況下使用字符流)

  • 字符流也可以拷貝文本文件, 但不推薦使用. 因為讀取時會把字節(jié)轉為字符, 寫出時還要把字符轉回字節(jié).
  • 程序需要讀取一段文本, 或者需要寫出一段文本的時候可以使用字符流

21.05_IO流(字符流是否可以拷貝非純文本的文件)

  • 不可以拷貝非純文本的文件
  • 因為在讀的時候會將字節(jié)轉換為字符,在轉換過程中,可能找不到對應的字符,就會用?代替,寫出的時候會將字符轉換成字節(jié)寫出去
  • 如果是?,直接寫出,這樣寫出之后的文件就亂了,看不了了

21.06_IO流(自定義字符數(shù)組的拷貝)

  •   FileReader fr = new FileReader("aaa.txt");          //創(chuàng)建字符輸入流,關聯(lián)aaa.txt
      FileWriter fw = new FileWriter("bbb.txt");          //創(chuàng)建字符輸出流,關聯(lián)bbb.txt
      
      int len;
      char[] arr = new char[1024*8];                      //創(chuàng)建字符數(shù)組
      while((len = fr.read(arr)) != -1) {                 //將數(shù)據(jù)讀到字符數(shù)組中
          fw.write(arr, 0, len);                          //從字符數(shù)組將數(shù)據(jù)寫到文件上
      }
      
      fr.close();                                         //關流釋放資源
      fw.close(); 
    

21.07_IO流(帶緩沖的字符流)

  • BufferedReader的read()方法讀取字符時會一次讀取若干字符到緩沖區(qū), 然后逐個返回給程序, 降低讀取文件的次數(shù), 提高效率
  • BufferedWriter的write()方法寫出字符時會先寫到緩沖區(qū), 緩沖區(qū)寫滿時才會寫到文件, 降低寫文件的次數(shù), 提高效率
  •   BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));  //創(chuàng)建字符輸入流對象,關聯(lián)aaa.txt
      BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));  //創(chuàng)建字符輸出流對象,關聯(lián)bbb.txt
      
      int ch;             
      while((ch = br.read()) != -1) {     //read一次,會先將緩沖區(qū)讀滿,從緩沖去中一個一個的返給臨時變量ch
          bw.write(ch);                   //write一次,是將數(shù)據(jù)裝到字符數(shù)組,裝滿后再一起寫出去
      }
      
      br.close();                         //關流
      bw.close();  
    

21.08_IO流(readLine()和newLine()方法)

  • BufferedReader的readLine()方法可以讀取一行字符(不包含換行符號)
  • BufferedWriter的newLine()可以輸出一個跨平臺的換行符號"\r\n"
  •   BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));
      BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));
      String line;
      while((line = br.readLine()) != null) {
          bw.write(line);
          //bw.write("\r\n");                 //只支持windows系統(tǒng)
          bw.newLine();                       //跨平臺的
      }
      
      br.close();
      bw.close(); 
    

21.09_IO流(將文本反轉)

  • 將一個文本文檔上的文本反轉,第一行和倒數(shù)第一行交換,第二行和倒數(shù)第二行交換

21.10_IO流(LineNumberReader)

  • LineNumberReader是BufferedReader的子類, 具有相同的功能, 并且可以統(tǒng)計行號
    • 調用getLineNumber()方法可以獲取當前行號
    • 調用setLineNumber()方法可以設置當前行號
  •   LineNumberReader lnr = new LineNumberReader(new FileReader("aaa.txt"));
      String line;
      lnr.setLineNumber(100);                                 //設置行號
      while((line = lnr.readLine()) != null) {
          System.out.println(lnr.getLineNumber() + ":" + line);//獲取行號
      }
      
      lnr.close(); 
    

21.11_IO流(裝飾設計模式)

  •   interface Coder {
          public void code();
      }
      
      class Student implements Coder {
      
          @Override
          public void code() {
              System.out.println("javase");
              System.out.println("javaweb");
          }
          
      }
      
      class ItcastStudent implements Coder {
          private Student s;                      //獲取到被包裝的類的引用
          public ItcastStudent(Student s) {       //通過構造函數(shù)創(chuàng)建對象的時候,傳入被包裝的對象
              this.s = s;
          }
          @Override
          public void code() {                    //對其原有功能進行升級
              s.code();
              System.out.println("數(shù)據(jù)庫");
              System.out.println("ssh");
              System.out.println("安卓");
              System.out.println(".....");
          }
          
      } 
    

21.12_IO流(使用指定的碼表讀寫字符)

  • FileReader是使用默認碼表讀取文件, 如果需要使用指定碼表讀取, 那么可以使用InputStreamReader(字節(jié)流,編碼表)
  • FileWriter是使用默認碼表寫出文件, 如果需要使用指定碼表寫出, 那么可以使用OutputStreamWriter(字節(jié)流,編碼表)
  •   BufferedReader br =                                     //高效的用指定的編碼表讀
              new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8"));
      BufferedWriter bw =                                     //高效的用指定的編碼表寫
              new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK"));
      int ch;
      while((ch = br.read()) != -1) {
          bw.write(ch);
      }
      
      br.close();
      bw.close();
    

21.13_IO流(轉換流圖解)

  • 畫圖分析轉換流

21.14_IO流(獲取文本上字符出現(xiàn)的次數(shù))

  • 獲取一個文本上每個字符出現(xiàn)的次數(shù),將結果寫在times.txt上

21.15_IO流(試用版軟件)

  • 當我們下載一個試用版軟件,沒有購買正版的時候,每執(zhí)行一次就會提醒我們還有多少次使用機會用學過的IO流知識,模擬試用版軟件,試用10次機會,執(zhí)行一次就提示一次您還有幾次機會,如果次數(shù)到了提示請購買正版

21.16_IO流(總結)

  • 1.會用BufferedReader讀取GBK碼表和UTF-8碼表的字符
  • 2.會用BufferedWriter寫出字符到GBK碼表和UTF-8碼表的文件中
  • 3.會使用BufferedReader從鍵盤讀取一行
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拴签,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌情屹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轮蜕,死亡現(xiàn)場離奇詭異诊杆,居然都是意外死亡,警方通過查閱死者的電腦和手機氓拼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門你画,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桃漾,你說我怎么就攤上這事坏匪。” “怎么了撬统?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵适滓,是天一觀的道長。 經常有香客問我恋追,道長凭迹,這世上最難降的妖魔是什么颅崩? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蕊苗,結果婚禮上,老公的妹妹穿的比我還像新娘沿彭。我一直安慰自己朽砰,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布喉刘。 她就那樣靜靜地躺著瞧柔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪睦裳。 梳的紋絲不亂的頭發(fā)上造锅,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音廉邑,去河邊找鬼哥蔚。 笑死,一個胖子當著我的面吹牛蛛蒙,可吹牛的內容都是我干的糙箍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼牵祟,長吁一口氣:“原來是場噩夢啊……” “哼深夯!你這毒婦竟也來了?” 一聲冷哼從身側響起诺苹,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤咕晋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后收奔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掌呜,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年坪哄,在試婚紗的時候發(fā)現(xiàn)自己被綠了站辉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡损姜,死狀恐怖饰剥,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情摧阅,我是刑警寧澤汰蓉,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站棒卷,受9級特大地震影響顾孽,放射性物質發(fā)生泄漏祝钢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一若厚、第九天 我趴在偏房一處隱蔽的房頂上張望拦英。 院中可真熱鬧,春花似錦测秸、人聲如沸疤估。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铃拇。三九已至,卻和暖如春沈撞,著一層夾襖步出監(jiān)牢的瞬間慷荔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工缠俺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留显晶,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓壹士,卻偏偏與公主長得像吧碾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子墓卦,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • ①IO流(字符流FileReader) 1.字符流是什么字符流是可以直接讀寫字符的IO流字符流讀取字符, 就要先讀...
    Y小圓臉閱讀 511評論 0 2
  • 一倦春、IO流整體結構圖 流是一組有順序的,有起點和終點的字節(jié)集合落剪,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象睁本。即數(shù)據(jù)在兩設備間的傳輸稱...
    慕凌峰閱讀 1,151評論 0 12
  • [TOC] 轉換流出現(xiàn)的原因及思想 由于字節(jié)流操作中文不是特別方便,所以忠怖,java就提供了轉換流呢堰。 字符流 = 字...
    lutianfei閱讀 491評論 0 3
  • 一、流的概念和作用凡泣。 流是一種有順序的枉疼,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偝苫虺橄笮狻<磾?shù)據(jù)在兩設備之間的傳輸...
    布魯斯不吐絲閱讀 10,018評論 2 95
  • 概述 計算機并不區(qū)分二進制文件與文本文件骂维。所有的文件都是以二進制形式來存儲的,因此贺纲,從本質上說航闺,所有的文件都是二進...
    奮斗的老王閱讀 1,328評論 0 51