標籤:style blog http color java 使用 os for 資料
TextReader以及TextWriter這兩個類,非常有用,很多方法都接受它們作為參數。
TextReader有兩個子類:
- StringReader/StringWriter 用於讀取字串;
- 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(); }
c# TextReader/TextWriter 的類