愚公系列2022年01月 Java教學課程 55-字符的讀取與寫入

      網友投稿 596 2022-05-29

      一、字符的讀取與寫入

      1.為什么會出現字符流

      字符流的介紹

      由于字節流操作中文不是特別的方便,所以Java就提供字符流

      字符流 = 字節流 + 編碼表

      中文的字節存儲方式

      用字節流復制文本文件時,文本文件也會有中文,但是沒有問題,原因是最終底層操作會自動進行字節拼接成中文,如何識別是中文的呢?

      漢字在存儲的時候,無論選擇哪種編碼存儲,第一個字節都是負數

      2.編碼表

      什么是字符集

      是一個系統支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數字等

      l計算機要準確的存儲和識別各種字符集符號,就需要進行字符編碼,一套字符集必然至少有一套字符編碼。常見字符集有ASCII字符集、GBXXX字符集、Unicode字符集等

      常見的字符集

      ASCII字符集:

      lASCII:是基于拉丁字母的一套電腦編碼系統,用于顯示現代英語,主要包括控制字符(回車鍵、退格、換行鍵等)和可顯示字符(英文大小寫字符、阿拉伯數字和西文符號)

      基本的ASCII字符集,使用7位表示一個字符,共128字符。ASCII的擴展字符集使用8位表示一個字符,共256字符,方便支持歐洲常用字符。是一個系統支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數字等

      GBXXX字符集:

      GBK:最常用的中文碼表。是在GB2312標準基礎上的擴展規范,使用了雙字節編碼方案,共收錄了21003個漢字,完全兼容GB2312標準,同時支持繁體漢字以及日韓漢字等

      Unicode字符集:

      UTF-8編碼:可以用來表示Unicode標準中任意字符,它是電子郵件、網頁及其他存儲或傳送文字的應用 中,優先采用的編碼。互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。它使用一至四個字節為每個字符編碼

      編碼規則:

      128個US-ASCII字符,只需一個字節編碼

      拉丁文等字符,需要二個字節編碼

      大部分常用字(含中文),使用三個字節編碼

      其他極少使用的Unicode輔助字符,使用四字節編碼

      3.字符串中的編碼解碼問題

      相關方法

      代碼演示

      public class StringDemo { public static void main(String[] args) throws UnsupportedEncodingException { //定義一個字符串 String s = "中國"; //byte[] bys = s.getBytes(); //[-28, -72, -83, -27, -101, -67] //byte[] bys = s.getBytes("UTF-8"); //[-28, -72, -83, -27, -101, -67] byte[] bys = s.getBytes("GBK"); //[-42, -48, -71, -6] System.out.println(Arrays.toString(bys)); //String ss = new String(bys); //String ss = new String(bys,"UTF-8"); String ss = new String(bys,"GBK"); System.out.println(ss); } }

      4.字符流寫數據

      介紹

      Writer: 用于寫入字符流的抽象父類

      FileWriter: 用于寫入字符流的常用子類

      構造方法

      成員方法

      刷新和關閉的方法

      代碼演示

      public class OutputStreamWriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("myCharStream\a.txt"); //void write(int c):寫一個字符 // fw.write(97); // fw.write(98); // fw.write(99); //void writ(char[] cbuf):寫入一個字符數組 char[] chs = {'a', 'b', 'c', 'd', 'e'}; // fw.write(chs); //void write(char[] cbuf, int off, int len):寫入字符數組的一部分 // fw.write(chs, 0, chs.length); // fw.write(chs, 1, 3); //void write(String str):寫一個字符串 // fw.write("abcde"); //void write(String str, int off, int len):寫一個字符串的一部分 // fw.write("abcde", 0, "abcde".length()); fw.write("abcde", 1, 3); //釋放資源 fw.close(); } }

      【愚公系列】2022年01月 Java教學課程 55-字符的讀取與寫入

      5.字符流讀數據

      介紹

      Reader: 用于讀取字符流的抽象父類

      FileReader: 用于讀取字符流的常用子類

      構造方法

      成員方法

      代碼演示

      public class InputStreamReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("myCharStream\\b.txt"); //int read():一次讀一個字符數據 // int ch; // while ((ch=fr.read())!=-1) { // System.out.print((char)ch); // } //int read(char[] cbuf):一次讀一個字符數組數據 char[] chs = new char[1024]; int len; while ((len = fr.read(chs)) != -1) { System.out.print(new String(chs, 0, len)); } //釋放資源 fr.close(); } }

      6.字符流用戶注冊案例

      案例需求

      將鍵盤錄入的用戶名和密碼保存到本地實現永久化存儲

      實現步驟

      獲取用戶輸入的用戶名和密碼

      將用戶輸入的用戶名和密碼寫入到本地文件中

      關流,釋放資源

      代碼實現

      public class CharStreamDemo8 { public static void main(String[] args) throws IOException { //需求: 將鍵盤錄入的用戶名和密碼保存到本地實現永久化存儲 //要求:用戶名獨占一行,密碼獨占一行 //分析: //1,實現鍵盤錄入,把用戶名和密碼錄入進來 Scanner sc = new Scanner(System.in); System.out.println("請錄入用戶名"); String username = sc.next(); System.out.println("請錄入密碼"); String password = sc.next(); //2.分別把用戶名和密碼寫到本地文件。 FileWriter fw = new FileWriter("charstream\\a.txt"); //將用戶名和密碼寫到文件中 fw.write(username); //表示寫出一個回車換行符 windows \r\n MacOS \r Linux \n fw.write("\r\n"); fw.write(password); //刷新流 fw.flush(); //3.關流,釋放資源 fw.close(); } }

      7.字符緩沖流

      字符緩沖流介紹

      BufferedWriter:將文本寫入字符輸出流,緩沖字符,以提供單個字符,數組和字符串的高效寫入,可以指定緩沖區大小,或者可以接受默認大小。默認值足夠大,可用于大多數用途

      BufferedReader:從字符輸入流讀取文本,緩沖字符,以提供字符,數組和行的高效讀取,可以指定緩沖區大小,或者可以使用默認大小。 默認值足夠大,可用于大多數用途

      構造方法

      代碼演示

      public class BufferedStreamDemo01 { public static void main(String[] args) throws IOException { //BufferedWriter(Writer out) BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\bw.txt")); bw.write("hello\r\n"); bw.write("world\r\n"); bw.close(); //BufferedReader(Reader in) BufferedReader br = new BufferedReader(new FileReader("myCharStream\\bw.txt")); //一次讀取一個字符數據 // int ch; // while ((ch=br.read())!=-1) { // System.out.print((char)ch); // } //一次讀取一個字符數組數據 char[] chs = new char[1024]; int len; while ((len=br.read(chs))!=-1) { System.out.print(new String(chs,0,len)); } br.close(); } }

      8.字符緩沖流特有功能

      方法介紹

      BufferedWriter:

      BufferedReader:

      代碼演示

      public class BufferedStreamDemo02 { public static void main(String[] args) throws IOException { //創建字符緩沖輸出流 BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\bw.txt")); //寫數據 for (int i = 0; i < 10; i++) { bw.write("hello" + i); //bw.write("\r\n"); bw.newLine(); bw.flush(); } //釋放資源 bw.close(); //創建字符緩沖輸入流 BufferedReader br = new BufferedReader(new FileReader("myCharStream\\bw.txt")); String line; while ((line=br.readLine())!=null) { System.out.println(line); } br.close(); } }

      9.9字符緩沖流操作文件中數據排序案例

      案例需求

      使用字符緩沖流讀取文件中的數據,排序后再次寫到本地文件

      實現步驟

      將文件中的數據讀取到程序中

      對讀取到的數據進行處理

      將處理后的數據添加到集合中

      對集合中的數據進行排序

      將排序后的集合中的數據寫入到文件中

      代碼實現

      public class CharStreamDemo14 { public static void main(String[] args) throws IOException { //需求:讀取文件中的數據,排序后再次寫到本地文件 //分析: //1.要把文件中的數據讀取進來。 BufferedReader br = new BufferedReader(new FileReader("charstream\\sort.txt")); //輸出流一定不能寫在這里,因為會清空文件中的內容 //BufferedWriter bw = new BufferedWriter(new FileWriter("charstream\\sort.txt")); String line = br.readLine(); System.out.println("讀取到的數據為" + line); br.close(); //2.按照空格進行切割 String[] split = line.split(" ");//9 1 2 5 3 10 4 6 7 8 //3.把字符串類型的數組變成int類型 int [] arr = new int[split.length]; //遍歷split數組,可以進行類型轉換。 for (int i = 0; i < split.length; i++) { String smallStr = split[i]; //類型轉換 int number = Integer.parseInt(smallStr); //把轉換后的結果存入到arr中 arr[i] = number; } //4.排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); //5.把排序之后結果寫回到本地 1 2 3 4... BufferedWriter bw = new BufferedWriter(new FileWriter("charstream\\sort.txt")); //寫出 for (int i = 0; i < arr.length; i++) { bw.write(arr[i] + " "); bw.flush(); } //釋放資源 bw.close(); } }

      總結

      5G教育 Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Shared memory共享內存
      下一篇:深入剖析Kubernetes系列連載(四)限制技術Cgroups
      相關文章
      国产日韩亚洲大尺度高清| 亚洲人成网站观看在线播放| 国产亚洲日韩一区二区三区| 亚洲成a人无码亚洲成av无码| 国产亚洲sss在线播放| 亚洲日本人成中文字幕| 亚洲免费闲人蜜桃| 亚洲乱码日产精品BD在线观看| 久久精品国产亚洲AV大全| 亚洲欧洲免费视频| 亚洲黄色在线观看网站| 亚洲综合久久久久久中文字幕| 久久国产亚洲高清观看| 亚洲第一二三四区| 国产日本亚洲一区二区三区| 亚洲中文字幕一二三四区苍井空| 亚洲国产最大av| 精品国产日韩久久亚洲| 亚洲精品国产首次亮相| 亚洲av乱码一区二区三区按摩| 久久亚洲精品无码gv| 亚洲?V乱码久久精品蜜桃 | 337p日本欧洲亚洲大胆精品555588| 亚洲AV日韩AV高潮无码专区| 亚洲一本综合久久| 亚洲色偷偷av男人的天堂| 亚洲二区在线视频| 亚洲国产精品成人午夜在线观看 | 亚洲一日韩欧美中文字幕在线| 亚洲欧美第一成人网站7777 | 亚洲av无码专区国产不乱码| 精品久久亚洲一级α| 亚洲不卡AV影片在线播放| 亚洲最大av无码网址| 亚洲中文字幕无码永久在线 | 亚洲成色WWW久久网站| 亚洲三级电影网址| 亚洲一级毛片中文字幕| 亚洲爆乳成av人在线视菜奈实| 亚洲av麻豆aⅴ无码电影| 国产AV无码专区亚洲AWWW |