日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO-3(Reader、Writer、编码、FileReader、FileWriter)

發布時間:2024/10/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO-3(Reader、Writer、编码、FileReader、FileWriter) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Reader

字符輸入流

read(0:讀取單個字符返回

read(char[]):將數據讀到數組中,返回讀取的個數

2. Writer

字符輸入流

已知子類:

  • BufferedWriter:高效
  • CharArrayWriter:寫入內存緩沖區,不是寫入文件
  • PrintWriter:打印流,提供自動刷新,自動換行等功能

寫的位置不同,所以write()未實現,所以Writer為抽象類。起到規范的作用。

3. 編碼

3.1 常見的編碼

GBK

最常用的中文碼表,用2個字節表示(第一個字節開頭為1,第二個字節開頭為0)

unicode

國際標準碼,2個字節存儲。

Java中char類型用此表,char c='a';占用兩個字節

Java中字符串按系統默認表解析,簡體中文版,字符串默認碼表是GBK。

UTF-8

基于unicode,一個字節存儲,更標準化,在每一個字節頭加了編碼信息。

3.2 可識別中文的碼表

GBK,UTF-8

3.3 編碼和解碼

1、編碼:文字----->(數字),"abc".getBytes()----->byte[]

2、解碼:(數字)----->文字,byte[] b={97,98,99}; new String(b);

4. FileReader

java.io.FileReader;

讀取字符流

繼承了InputStreamReader--->Reader

BufferedReader也繼承了Reader.

4.1 構造方法

假定默認字符編碼和默認自己緩沖區大小都適當

FileWriter(String fileName);

FileWriter(String fileName,boolean append):是否追加

4.2 讀數據步驟

  • 創建輸入流對象
  • 調用輸入流對象的讀數據方法
  • 釋放資源
  • import java.io.FileReader; import java.io.IOException;public class Test{public static void main(String[] args) throws IOException {FileReader fr=new FileReader("a.txt");int ch=0;while((ch=fr.read())!=-1){//輸出字符對應的編碼值System.out.println(ch);//輸出字符本身System.out.println((char)ch);}fr.close();} }

    運行結果:

    4.2.1 分析

    FileReader fr=new FileReader("a.txt"):文件a.txt必須存在,否則拋出java.io.FileNotFoundException異常。

    int read():一次讀取一個字符。

    • int ch=fr.read();
    • 若文件a.txt中有換行,read()也會讀到

    int read(char[] chs):返回的是實際讀取的個數

    • char[] chs=new char[5];
    • int len=fr.read(chs); ? ? ? //len=5
    • chs; ? ? //chs={'h','e','l','l','o'}
    • len=fr.read(chs); ? ? ? //len=5
    • chs; ? ? //chs={'\r','\n','w','o','r'}
    • len=fr.read(chs); ? ? ? //len=4
    • chs; ? ? //chs={'l','d','\r','\n','r'}------上一次讀取的r,此次未覆蓋

    說明len讀取長度,不是實際chs的長度————最后顯示數據時,格式為:System.out.println(new String(chs,0,len));只轉實際讀取的長度,排除了前面情況中的'r'。

    當實際讀取長度為-1時,說明無數據可讀了,可作為循環判斷條件。

    5. FileWriter

    java.io.FileWriter;

    會拋出IO異常

    5.1 構造函數

    FileWriter(String FileName);

    FileWriter(String FileName,boolean append);是否追加

    5.2 寫數據步驟

    • 創建輸出流對象
    • 調用輸出流對象的寫數據方法
    • 釋放資源
    import java.io.FileWriter; import java.io.IOException;public class Test{public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("a.txt");fw.write("你好!");fw.flush();fw.close();} }

    運行結果:

    5.2.1 分析

    • FileWriter fw=new FileWriter("a.txt");----做的事情包括:
      • 創建一個a.txt文件,
      • 創建一個輸出流對象fw
      • 將輸出流對象指向文件
    • write(String str):調用fw.write("IO流")時,并未將IO流寫入文件,而是寫入了內存緩沖區,需調用fw.flush()將緩沖區的數據刷新到文件中(硬盤存儲基本單位是字節,此處是字符串,需刷)
    • 不釋放資源時,當程序未結束時,不可刪除文件a.txt,因為正在被Java程序使用。
    • 當調用fw.close()后,即使Java程序未結束,也可刪除a.txt。
    • 若未寫fw.flush()而直接寫了fw.close()則也會將內容刷新到文件中。因為close()會在關閉前檢查緩沖區,若有內容,先fluse()再close(),釋放資源。
    • close()之后,流對象fw不可再使用。

    5.2.2 write方法

    write(String str):寫一個字符串數據

    write(String str,int index,int len):一部分

    write(int ch):寫一個字符數據,‘a’,97都可以

    write(char[] chs):寫一個字符數組

    write(char[] cha,int index,int len):一部分

    5.2.3 實現數據的換行

    fw.write("\n");

    但用記事本打開無換行,因為Windows識別的換行是“\r\n”

    • Windows:\r\n
    • Linux:\n
    • mac:\r

    5.2.4 數據的追加寫入

    用構造函數:FileWriter(String FileName,boolean append);設置append為true,默認是false。

    5.3 復制文件

    數據源:a.txt

    讀數據:FileReader

    目的地:b.txt

    寫數據:FileWriter

    import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class Test{public static void main(String[] args) throws IOException {FileReader fr=new FileReader("a.txt");FileWriter fw=new FileWriter("e:\\b.txt");int ch=0;while((ch=fr.read())!=-1)fw.write(ch);fw.flush();fw.close();fr.close();} }

    運行結果;

    ? ? ? ? ? ? ??

    ?

    ?

    總結

    以上是生活随笔為你收集整理的IO-3(Reader、Writer、编码、FileReader、FileWriter)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。