字元流---Day32

来源:https://www.cnblogs.com/hpcz190911/archive/2019/12/29/12113857.html
-Advertisement-
Play Games

時隔多久,我又回來寫博客了,最近忙於兩個課設,五周,搞得頭髮都不知道掉了多少根了,還沒成為程式員就開始掉了,等我成為一名程式員的時候豈不是要禿頭了,IT界的人會不會幫我當成大佬了,哈哈哈哈,希望我以後也可以成為一名IT界的大佬,雖然有點不現實,但是夢想還是要有的,萬一不經意間就實現了也說不定,加油~ ...


時隔多久,我又回來寫博客了,最近忙於兩個課設,五周,搞得頭髮都不知道掉了多少根了,還沒成為程式員就開始掉了,等我成為一名程式員的時候豈不是要禿頭了,IT界的人會不會幫我當成大佬了,哈哈哈哈,希望我以後也可以成為一名IT界的大佬,雖然有點不現實,但是夢想還是要有的,萬一不經意間就實現了也說不定,加油~


 

字元流

  當使用位元組流讀取文本文件時,可能會有一個小問題。就是遇到中文字元時,可能不會顯示完整的字元,那是因為一個中文字元可能占用多個位元組存儲。所以Java提供一些字元流類,以字元為單位讀寫數據,專門用於處理文本文件

字元輸入流[Reader]

  java.io.Reader 抽象類是表示用於讀取字元流的所有類的超類,可以讀取字元信息到記憶體中。它定義了字元輸入 流的基本共性功能方法

    public void close() :關閉此流並釋放與此流相關聯的任何系統資源。   

    public int read() : 從輸入流讀取一個字元。

    public int read(char[] cbuf) : 從輸入流中讀取一些字元,並將它們存儲到字元數組 cbuf中 

FileReader類

  java.io.FileReader 類是讀取字元文件的便利類。構造時使用系統預設的字元編碼和預設位元組緩衝區。

    1. 字元編碼:位元組與字元的對應規則。Windows系統的中文編碼預設是GBK編碼表。 idea中UTF-8

    2. 位元組緩衝區:一個位元組數組,用來臨時存儲位元組數據。 

  構造方法:

    FileReader(File file) : 創建一個新的 FileReader ,給定要讀取的File對象。 

    FileReader(String fileName) : 創建一個新的 FileReader ,給定要讀取的文件的名稱。

讀取字元數據:

  1. 讀取字元: read 方法,每次可以讀取一個字元的數據,提升為int類型,讀取到文件末尾,返回 -1 ,迴圈讀取

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileReader;
 4 
 5 public class FileReader_02 {
 6     public static void main(String[] args) throws Exception{
 7         //使用文件名創建流對象
 8         FileReader fr = new FileReader(".\\src\\demosummary\\file\\a.txt");
 9         //定義變數,保存數據
10         int a;
11         //迴圈讀取
12         while ((a = fr.read())!= -1) {
13             System.out.println((char) a);
14         }
15         //釋放資源
16         fr.close();
17     }
18     /**
19      * 輸出結果
20      * 黑
21      * 馬
22      * 程
23      * 序
24      * 員
25      */
26 }

  2. 使用字元數組讀取: read(char[] cbuf) ,每次讀取b的長度個字元到數組中,返回讀取到的有效字元個數, 讀取到末尾時,返回 -1

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileReader;
 4 
 5 public class FileReader_03 {
 6     public static void main(String[] args) throws Exception{
 7         //創建流對象
 8         FileReader fr = new FileReader(".//src//demosummary//file//a.txt");
 9         //定義變數
10         int len;
11         //定義字元數組,作為裝字元的容器
12         char[] l = new char[2];
13         //迴圈讀取
14         while ((len = fr.read(l)) != -1) {
15             System.out.println(new String(l, 0, len));
16         }
17         fr.close();
18     }
19     /**
20      * 輸出結果
21      * 黑馬
22      * 程式
23      * 員
24      */
25 }

字元輸出流[writer]

  java.io.Writer 抽象類是表示用於寫出字元流的所有類的超類,將指定的字元信息寫出到目的地。它定義了位元組 輸出流的基本共性功能方法

    void write(int c) 寫入單個字元。

    void write(char[] cbuf) 寫入字元數組。

    abstract  void write(char[] cbuf, int off, int len) 寫入字元數組的某一部分,off數組的開始索引,len 寫的字元個數。

    void write(String str) 寫入字元串。

    void write(String str, int off, int len) 寫入字元串的某一部分,off字元串的開始索引,len寫的字元個 數。

    void flush() 刷新該流的緩衝。

    void close() 關閉此流,但要先刷新它。 

FileWriter類

  java.io.FileWriter 類是寫出字元到文件的便利類。構造時使用系統預設的字元編碼和預設位元組緩衝區

  構造方法

    FileWriter(File file) : 創建一個新的 FileWriter,給定要讀取的File對象。 

    FileWriter(String fileName) : 創建一個新的 FileWriter,給定要讀取的文件的名稱

基本寫出數據

  寫出字元: write(int b) 方法,每次可以寫出一個字元數據

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileWriter;
 4 
 5 public class FileReader_04 {
 6     public static void main(String[] args) throws Exception{
 7         //創建流對象
 8         FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//b.txt");
 9         //寫入數據
10         fw.write(97);
11         fw.write('b');
12         fw.write('C');
13         fw.write(30000);
14         fw.write(40000);
15 
16         //刷新緩衝
17         fw.flush();
18         //釋放資源
19         fw.close();
20     }
21     /**
22      * 輸出結果
23      * abC田鱀
24      */
25 }

  註意:

    1. 雖然參數為int類型四個位元組,但是只會保留一個字元的信息寫出。

    2. 未調用close方法,數據只是保存到了緩衝區,並未寫出到文件中。 

關閉和刷新

  因為內置緩衝區的原因,如果不關閉輸出流,無法寫出字元到文件中。但是關閉的流對象,是無法繼續寫出數據 的。如果我們既想寫出數據,又想繼續使用流,就需要 flush 方法了。

    flush :刷新緩衝區,流對象可以繼續使用。

    close :先刷新緩衝區,然後通知系統釋放資源。流對象不可以再被使用了。

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileWriter;
 4 
 5 public class FileReader_05 {
 6     public static void main(String[] args) throws Exception{
 7         //創建流對象
 8         FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//c.txt");
 9 
10         //寫入數據並刷新
11         fw.write("刷");
12         fw.flush();
13         fw.write("新");
14         fw.flush();
15         
16         //寫入數據,並關閉
17         fw.write("關");
18         fw.close();
19         fw.write("閉");//報錯(流已關閉): Stream closed
20         fw.close();
21         
22         //釋放資源
23         fw.close();
24     }
25     /**
26      * 輸出結果
27      * 刷新關
28      */
29 }

  註意:即便是flush方法寫出了數據,操作的後還是要調用close方法,釋放系統資源。 

寫出其他數據

  1. 寫出字元數組 : write(char[] cbuf) 和 write(char[] cbuf, int off, int len) ,每次可以寫出字元數 組中的數據,用法類似FileOutputStream

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileWriter;
 4 
 5 public class FileReader_06 {
 6     public static void main(String[] args) throws Exception{
 7         //創建流對象
 8         FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//d.txt");
 9 
10         char[] chars = "黑馬程式員".toCharArray();
11 
12         fw.write(chars);//黑馬程式員
13 
14         fw.write(chars,2,2);//程式
15         //釋放資源
16         fw.close();
17     }
18     /**
19      * 輸出結果
20      * 黑馬程式員
21      * 程式
22      */
23 }

  2. 寫出字元串: write(String str) 和 write(String str, int off, int len) ,每次可以寫出字元串中的 數據,更為方便

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileWriter;
 4 
 5 public class FileReader_07 {
 6     public static void main(String[] args) throws Exception{
 7         //創建流對象
 8         FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//e.txt");
 9 
10         String string = "傳智播客";
11 
12         fw.write(string);//傳智播客
13 
14         fw.write(string,2,2);//播客
15         //釋放資源
16         fw.close();
17     }
18     /**
19      * 輸出結果
20      * 傳智播客播客
21      */
22 }

  3. 續寫和換行:操作類似於FileOutputStream

 1 package demosummary.file.filereader;
 2 
 3 import java.io.FileWriter;
 4 
 5 public class FileReader_08 {
 6     public static void main(String[] args) throws Exception{
 7         //創建流對象
 8         FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//f.txt");
 9 
10         //寫入字元串
11         fw.write("黑馬");
12         //寫入換行
13         fw.write("\r\n");
14         //寫入字元串
15         fw.write("程式員");
16         //釋放資源
17         fw.close();
18     }
19     /**
20      * 輸出結果
21      * 黑馬
22      * 程式員
23      */
24 }

  註意:字元流,只能操作文本文件,不能操作圖片,視頻等非文本文件。當我們單純讀或者寫文本文件時 使用字元流 其他情況使用位元組流


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...