<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 字符流 當我們操作的文件中有中文字符,并且需要對中文字符做出處理時怎么辦呢? ## 字符編碼表 我們知道計算機底層數據存儲的都是二進制數據,而我們生活中的各種各樣的數據,如何才能和計算機中存儲的二進制數據對應起來呢? 這時把每一個字符和一個整數對應起來,就形成了一張編碼表,老美他們的編碼表就是ASCII表。其中就是各種英文字符對應的編碼。 編碼表:其實就是生活中字符和計算機二進制的對應關系表。 1. ascii: 一個字節中的7位就可以表示。對應的字節都是正數。0-xxxxxx 2. iso-8859-1:拉丁碼表 latin,用了一個字節用的8位。1-xxxxxxx 負數。 3. GB2312:簡體中文碼表。包含6000-7000中文和符號。用兩個字節表示。兩個字節第一個字節是負數,第二個字節可能是正數 GBK:目前最常用的中文碼表,2萬的中文和符號。用兩個字節表示,其中的一部分文字,第一個字節開頭是1,第二字節開頭是0 GB18030:最新的中文碼表,目前還沒有正式使用。 4. unicode:國際標準碼表:無論是什么文字,都用兩個字節存儲。 * Java中的char類型用的就是這個碼表。char c = 'a';占兩個字節。 * Java中的字符串是按照系統默認碼表來解析的。簡體中文版 字符串默認的碼表是GBK。 5. UTF-8:基于unicode,一個字節就可以存儲數據,不要用兩個字節存儲,而且這個碼表更加的標準化,在每一個字節頭加入了編碼信息(后期到api中查找)。 能識別中文的碼表:GBK、UTF-8;正因為識別中文碼表不唯一,涉及到了編碼解碼問題。 對于我們開發而言;常見的編碼 GBK UTF-8 ISO-8859-1 ~~~ 文字--->(數字) :編碼。 "abc".getBytes() byte[] (數字)--->文字 : 解碼。 byte[] b={97,98,99} new String(b) ~~~ # 字符輸入流Reader 讀取擁有中文的文件時,使用的字節流在讀取,那么我們讀取到的都是一個一個字節。只要把這些字節去查閱對應的編碼表,就能夠得到與之對應的字符。API中是否給我們已經提供了讀取相應字符的功能流對象,Reader,讀取字符流的抽象超類。 * int read():讀取單個字符并返回 * int read(char[]):將數據讀取到數組中,并返回讀取的個數。 ## FileReader類 查閱FileInputStream的API,發現FileInputStream 用于讀取諸如圖像數據之類的原始字節流。要讀取字符流,請考慮使用 FileReader。 打開FileReader的API介紹。用來讀取字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩沖區大小都是適當的 * 構造方法 ~~~ FileReader(File file) 在給定從中讀取數據的File的情況下創建一個新FileReader FileReader(String fileName) 在給定從中讀取數據的文件中的情況下創建一個新FileReader ~~~ **FileReader讀取包含中文的文件** ~~~ public static void main(String[] args) throws IOException { //給文件中寫中文 writeCNText(); //讀取文件中的中文 readCNText(); } //讀取中文 public static void readCNText() throws IOException { FileReader fr = new FileReader("D:\\test\\cn.txt"); int ch = 0; while((ch = fr.read())!=-1){ //輸出的字符對應的編碼值 System.out.println(ch); //輸出字符本身 System.out.println((char)ch); } } //寫中文 public static void writeCNText() throws IOException { FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt"); fos.write("java".getBytes()); fos.close(); } ~~~ # 字符輸出流Writer Writer是寫入字符流的抽象類。其中描述了相應的寫的動作。 ![](https://box.kancloud.cn/20f20f3b4206d5bfba27223a4f271fe3_697x491.png) ## FileWriter類 查閱FileOutputStream的API,發現FileOutputStream 用于寫入諸如圖像數據之類的原始字節的流。要寫入字符流,請考慮使用 FileWriter。 打開FileWriter的API介紹。用來寫入字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩沖區大小都是可接受的。 * 構造方法 ![](https://box.kancloud.cn/8718d79953a7ccda016709e744843284_904x233.png) **FileWriter寫入中文到文件中** 寫入字符到文件中,先進行流的刷新,再進行流的關閉。 ~~~ public class FileWriterDemo { public static void main(String[] args) throws IOException { //演示FileWriter 用于操作文件的便捷類。 FileWriter fw = new FileWriter("d:\\text\\fw.txt"); fw.write("你好謝謝再見");//這些文字都要先編碼。都寫入到了流的緩沖區中。 fw.flush(); fw.close(); } } ~~~ **flush()和close()的區別** ![](https://box.kancloud.cn/012aca3010dabaf78fe2bb9fe68a1dc3_699x189.png) flush():將流中的緩沖區緩沖的數據刷新到目的地中,刷新后,流還可以繼續使用。 close():關閉資源,但在關閉前會將緩沖區中的數據先刷新到目的地,否則丟失數據,然后在關閉流。流不可以使用。如果寫入數據多,一定要一邊寫一邊刷新,最后一次可以不刷新,由close完成刷新并關閉。 # 復制文本文件 ~~~ public class CopyTextFileTest { public static void main(String[] args) throws IOException { copyTextFile(); } public static void copyTextFile() throws IOException { //1,明確源和目的。 FileReader fr = new FileReader("c:\\cn.txt"); FileWriter fw = new FileWriter("c:\\copy.txt"); //2,為了提高效率。自定義緩沖區數組。字符數組。 char[] buf = new char[1024]; int len = 0; while((len=fr.read(buf))!=-1){ fw.write(buf,0,len); } /*2,循環讀寫操作。效率低。 int ch = 0; while((ch=fr.read())!=-1){ fw.write(ch); } */ //3,關閉資源。 fw.close(); fr.close(); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看