C# StreamReader、StreamWriter、TextReader、TextWriter读写文本文件 作者:马育民 • 2025-07-01 15:59 • 阅读:10000 # 介绍 TextReader、TextWriter是接口 StreamReader、StreamWriter 是实现类 # StreamReader 命名空间:System.IO ### 构造方法 - StreamReader(Stream, Encoding):用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。 - StreamReader(String, Encoding):用指定的字符编码,为指定的文件名初始化 StreamReader 类的一个新实例。 ### 属性 CurrentEncoding:获取当前 StreamReader 对象正在使用的当前字符编码。 EndOfStream:如果当前流位置位于流的末尾,则为 true;否则为 false ### 方法 Close():关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。 Dispose():释放由 TextReader 对象使用的所有资源。(继承自 TextReader) Dispose(Boolean):关闭基础流,释放 StreamReader 使用的未托管资源,同时还可以根据需要释放托管资源。 Peek():返回下一个可用字符,但不使用它。 Read():读取输入流中的下一个字符并使该字符位置提升一个字符。 Read(Char[], Int32, Int32):从指定的索引位置开始将来自当前流的指定的最多字符读到缓冲区。 ReadLine():从当前流中读取一行字符并将数据作为字符串返回。 ReadToEnd():读取来自流的当前位置到结尾的所有字符。 ### 例子 ``` using System; using System.IO; class Test { public static void Main() { try { // Create an instance of StreamReader to read from a file. // The using statement also closes the StreamReader. using (StreamReader sr = new StreamReader("TestFile.txt")) { string line; // Read and display lines from the file until the end of // the file is reached. while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } catch (Exception e) { // Let the user know what went wrong. Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } } } ``` # StreamWriter ### 构造函数 StreamWriter(Stream, Encoding) 使用指定的编码和默认缓冲区大小初始化指定流的 StreamWriter 类的新实例。 StreamWriter(Stream, Encoding, Int32) 使用指定的编码和缓冲区大小初始化指定流的 StreamWriter 类的新实例。 StreamWriter(String, Boolean) 使用默认编码和缓冲区大小初始化指定文件 StreamWriter 类的新实例。 如果文件存在,可以覆盖或追加到该文件。 如果该文件不存在,此构造函数将创建一个新文件。 StreamWriter(String, Boolean, Encoding) 使用指定的编码和默认缓冲区大小初始化指定文件的 StreamWriter 类的新实例。 如果文件存在,可以覆盖或追加到该文件。 如果该文件不存在,此构造函数将创建一个新文件。 StreamWriter(String, Boolean, Encoding, Int32) 使用指定的编码和缓冲区大小为指定路径上的指定文件初始化 StreamWriter 类的新实例。 如果文件存在,可以覆盖或追加到该文件。 如果该文件不存在,此构造函数将创建一个新文件。 ### 字段 CoreNewLine:存储用于此 TextWriter的换行符。(继承自 TextWriter) Null:提供一个 StreamWriter,其中没有可写入但无法从中读取的后盾存储。 ### 属性 AutoFlush:获取或设置一个值,该值指示每次调用 Write(Char)后,StreamWriter 是否将其缓冲区刷新到基础流。 Encoding:获取在其中写入输出的 Encoding。 NewLine:获取或设置当前 TextWriter使用的行终止符字符串。(继承自 TextWriter) ### 方法 Close() 关闭当前 StreamWriter 对象和基础流。 Dispose() 释放 TextWriter 对象使用的所有资源。 (继承自 TextWriter) Dispose(Boolean) 导致任何缓冲数据写入基础流,释放 StreamWriter使用的非托管资源,以及(可选)托管资源。 Flush() 清除当前编写器的所有缓冲区,并导致任何缓冲数据写入基础流。 Write(Boolean) 将 Boolean 值的文本表示形式写入文本流。(继承自 TextWriter) Write(Char) 将字符写入流。 Write(Char[]) 将字符数组写入流。 Write(Char[], Int32, Int32) 将字符的子数组写入流。 Write(Decimal) 将小数值的文本表示形式写入文本流。(继承自 TextWriter) Write(Double) 将 8 字节浮点值的文本表示形式写入文本流。(继承自 TextWriter) Write(Int32) 将 4 字节带符号整数的文本表示形式写入文本流。(继承自 TextWriter) Write(Int64) 将 8 字节有符号整数的文本表示形式写入文本流。(继承自 TextWriter) Write(Object) 通过对该对象调用 ToString 方法,将对象的文本表示形式写入文本流。(继承自 TextWriter) Write(String) 将字符串写入流。 Write(String, Object) 使用与 Format(String, Object) 方法相同的语义将格式化字符串写入流。 Write(String, Object, Object) 使用与 Format(String, Object, Object) 方法相同的语义将格式化字符串写入流。 Write(String, Object, Object, Object) 使用与 Format(String, Object, Object, Object) 方法相同的语义将格式化字符串写入流。 Write(String, Object[]) 使用与 Format(String, Object[]) 方法相同的语义将格式化字符串写入流。 Write(StringBuilder) 将字符串生成器写入文本流。(继承自 TextWriter) Write(UInt32) 将 4 字节无符号整数的文本表示形式写入文本流。(继承自 TextWriter) Write(UInt64) 将 8 字节无符号整数的文本表示形式写入文本流。(继承自 TextWriter) WriteLine():将行终止符写入文本流。(继承自 TextWriter) WriteLine(Boolean):将 Boolean 值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Char):将字符写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Char[]):将字符数组写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Char[], Int32, Int32):将字符的子数组写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Decimal):将小数值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Double):将 8 字节浮点值的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Int32):将 4 字节带符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Int64):将 8 字节有符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(Object):通过对该对象调用 ToString 方法,然后调用行终止符,将对象的文本表示形式写入文本流。(继承自 TextWriter) WriteLine(String):将字符串写入流,后跟行终止符。 WriteLine(String, Object):使用与 Format(String, Object) 方法相同的语义将格式化字符串和新行写入流。 WriteLine(String, Object, Object):使用与 Format(String, Object, Object) 方法相同的语义将格式化字符串和新行写入流。 WriteLine(String, Object, Object, Object):使用与 Format(String, Object)相同的语义将格式化字符串和新行写出流。 WriteLine(String, Object[]):使用与 Format(String, Object)相同的语义将格式化字符串和新行写出流。 WriteLine(StringBuilder):将字符串生成器的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(UInt32):将 4 字节无符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) WriteLine(UInt64):将 8 字节无符号整数的文本表示形式写入文本流,后跟行终止符。(继承自 TextWriter) ### 例子 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace StreamReadWrite { class Program { static void Main(string[] args) { // Get the directories currently on the C drive. DirectoryInfo[] cDirs = new DirectoryInfo(@"c:\").GetDirectories(); // Write each directory name to a file. using (StreamWriter sw = new StreamWriter("CDriveDirs.txt")) { foreach (DirectoryInfo dir in cDirs) { sw.WriteLine(dir.Name); } } // Read and show each line from the file. string line = ""; using (StreamReader sr = new StreamReader("CDriveDirs.txt")) { while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } } } ``` 原文出处:http://www.malaoshi.top/show_1GW1PYFGWUmg.html