c# TextReader/TextWriter 的類


TextReader以及TextWriter這兩個類,非常有用,很多方法都接受它們作為參數。

  TextReader有兩個子類:

  1. StringReader/StringWriter 用於讀取字符串;
  2. StreamReader/StreamWriter 用於讀取流;

一、StringReader的作用

  StringReader主要用於讀取字符串。

  常用方法如下:

成員 說明
Close 關閉 StringReader
Peek 返回下一個可用的字符,但不使用它
Read 讀取輸入字符串中的下一個字符並將該字符的位置提升一個字符,重載可提升任意個字符
ReadAsync 讀取字符的指定最大數量從當前字符串異步和數據寫入緩沖區,從指定索引處開始
ReadBlock 從當前文本讀取器中讀取指定數目的字符並從指定索引開始將該數據寫入緩沖區
ReadBlockAsync 讀取字符的指定最大數量從當前字符串異步和數據寫入緩沖區,從指定索引處開始
ReadLine 讀取一行字符從當前字符串並將數據作為字符串返回
ReadLineAsync 讀取一行字符異步從當前字符串並將數據作為字符串返回
ReadToEnd 讀取當前位置的任何字符。該字符串的末尾並將其返回作為一個字符串
ReadToEndAsync 讀取當前位置的所有字符為字符串的結尾異步並將其返回作為一個字符串

 

  示例如下:

復制代碼
        static void Main(string[] args) { TextReader tr = new StringReader("你在他鄉還好嗎?\n很好!"); string line1 = tr.ReadLine(); //讀取一行 Console.WriteLine(line1); //你在他鄉好好嗎? string line2 = tr.ReadLine(); Console.WriteLine(line2); //很好! //注意到此處時,指針已到,末尾,注釋掉上面4行才能看到效果 //Peek()是讀,但不用,不會影響指針 while (tr.Peek() > 0) { Console.WriteLine((char)tr.Read()); //逐個讀取所有字符  } char[] charArr = new char[4]; tr.ReadBlock(charArr, 1, 3); for (int i = 0; i < charArr.Count(); i++) { Console.WriteLine(charArr[i]); } Console.ReadKey(); }
復制代碼

二、StreamReader的使用

  StreamReader屬性:

屬性 說明
BaseStream 返回基礎流
CurrentEncoding 獲取當前 StreamReader 對象正在使用的當前字符編碼
EndOfStream 獲取一個值,該值表示當前的流位置是否在流的末尾

  StreamReader方法:

方法 說明
Close 關閉 StreamReader 對象和基礎流,並釋放與讀取器關聯的所有系統資源
DiscardBufferedData 清除內部緩沖區
Dispose 釋放由 TextReader 對象使用的所有資源
Peek 返回下一個可用的字符,但不使用它
Read 讀取輸入流中的下一個字符並使該字符的位置提升一個字符
ReadAsync 異步從當前流中讀取指定數目的字符並從指定索引開始將該數據寫入緩沖區
ReadBlock 從當前流中讀取指定數目的字符並從指定索引開始將該數據寫入緩沖區
ReadBlockAsync 異步從當前流中讀取指定數目的字符並從指定索引開始將該數據寫入緩沖區
ReadLine 從當前流中讀取一行字符並將數據作為字符串返回
ReadLineAsync 從當前流中異步讀取一行字符並將數據作為字符串返回
ReadToEnd 從流的當前位置到末尾讀取所有字符
ReadToEndAsync 異步讀取從當前位置到流的結尾的所有字符並將它們作為一個字符串返回

  示例:

復制代碼
        static void Main(string[] args) { FileStream fs = new FileStream(@"D:\123.txt",FileMode.Open,FileAccess.Read); TextReader tr = new StreamReader(fs,Encoding.Default); string str = tr.ReadToEnd(); Console.WriteLine(str); Console.ReadKey(); }
復制代碼

 

三、StringWriter的作用

  StringWirter主要用於對字符串進行讀寫。

  常用屬性:

屬性 說明
Encoding 獲取將輸出寫入到其中的 Encoding
FormatProvider 獲取控制格式設置的對象
NewLine 獲取或設置由當前 TextWriter 使用的行結束符字符串

  常用方法:

方法 說明
Close 關閉當前的 StringWriter 和基礎流
Dispose 釋放StringWriter的資源
Flush 清理當前編寫器的所有緩沖區,使所有緩沖數據寫入基礎設備
GetStringBuilder 返回基礎 StringBuilder
Write 寫入到 StringWriter 的此實例中
WriteLine 寫入重載參數指定的某些數據,后跟行結束符

  示例:

復制代碼
        static void Main(string[] args) { StringBuilder sb = new StringBuilder(); sb.Append("你在他鄉還好嗎?"); using (TextWriter tw = new StringWriter(sb)) { tw.WriteLine("難混啊!"); Console.WriteLine(sb.ToString()); //輸出你在他鄉還好嗎?難混啊!(后面有個換行符,Write則沒有)  } Console.ReadKey(); }
復制代碼

 

四、StreamWriter的作用

  StreamWriter用於將一段內容寫入到流里面,包括FileStream,MemoryStream等各種流。

  屬性:

屬性 說明
AutoFlush 獲取或設置一個值,該值指示 StreamWriter 是否在每次調用 StreamWriter.Write 之后,將其緩沖區刷新到基礎流
BaseStream 獲取同后備存儲區連接的基礎流
Encoding 獲取將輸出寫入到其中的 Encoding

 

  方法:

方法 說明
Close 關閉當前的 StreamWriter 對象和基礎流
Flush 清理當前編寫器的所有緩沖區,並使所有緩沖數據寫入基礎流
FlushAsync 異步清除此流的所有緩沖區並導致所有緩沖數據都寫入基礎設備中
Write 將字符寫入流
WriteAsync 將字符異步寫入該流
WriteLine 將字符寫入該流,並加上結束符
WriteLineAsync 將行結束符異步寫入該流

 

  示例:

復制代碼
        static void Main(string[] args) { using (StreamWriter tw = new StreamWriter(@"D:\123.txt")) { tw.WriteLine("難混啊!"); Console.WriteLine(tw.BaseStream.GetType()); //輸出FileStream  } Console.ReadKey(); }
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM