说明:实现一个TextReader,是其子类。父类是Text读取器,子类是流读取器
一、构造函数:
1、StreamReader(Stream stream)stream对象包括Stream对象及其派生类对象
2、StreamReader(string str, Encoding encoding),str是文件地址,enconding是编码
3、StreamReader(string str, bool k),如果想让程序自动判断何种编码,那就k传true,通过查看流的前三个字节来监测编码。
4、StreamReader(string str,Encoding encoding, bool k,int bufferSize),最后一个参数是缓冲区大小
还有另外六个构造函数
二、重要属性
1、BaseStream,将上述的构造函数使用的流对象,重新提取出来。
FileStream fs = new FileStream ( "D:\\TextReader.txt", FileMode.Open , FileAccess.Read ) ; StreamReader sr= new StreamReader ( fs ) ; //本例中的BaseStream就是 FileStream sr.BaseStream.Seek (0 , SeekOrigin.Begin ) ;
2、CurrentEncoding获取当前StreamReader的Encoding
3、EndOfStream 判断StreamReader是否已经出去当前流的末尾
三、实例

1 static void Main(string[] args) 2 { 3 4 //文件地址 5 string txtFilePath="D:\\TextReader.txt"; 6 //定义char数组 7 char[] charBuffer2 = new char[3]; 8 9 //利用FileStream类将文件文本数据变成流然后放入StreamReader构造函数中 10 using(FileStream stream = File.OpenRead(txtFilePath)) 11 { 12 using (StreamReader reader = new StreamReader(stream)) 13 { 14 //StreamReader.Read()方法 15 DisplayResultStringByUsingRead(reader); 16 } 17 } 18 19 using (FileStream stream = File.OpenRead(txtFilePath)) 20 { 21 //使用Encoding.ASCII来尝试下 22 using (StreamReader reader = new StreamReader(stream,Encoding.ASCII,false)) 23 { 24 //StreamReader.ReadBlock()方法 25 DisplayResultStringByUsingReadBlock(reader); 26 } 27 } 28 29 //尝试用文件定位直接得到StreamReader,顺便使用 Encoding.Default 30 using(StreamReader reader = new StreamReader(txtFilePath, Encoding.Default,false,123)) 31 { 32 //StreamReader.ReadLine()方法 33 DisplayResultStringByUsingReadLine(reader); 34 } 35 36 //也可以通过File.OpenText方法直接获取到StreamReader对象 37 using (StreamReader reader = File.OpenText(txtFilePath)) 38 { 39 //StreamReader.ReadLine()方法 40 DisplayResultStringByUsingReadLine(reader); 41 } 42 43 Console.ReadLine(); 44 } 45 46 /// <summary> 47 /// 使用StreamReader.Read()方法 48 /// </summary> 49 /// <param name="reader"></param> 50 public static void DisplayResultStringByUsingRead(StreamReader reader) 51 { 52 int readChar = 0; 53 string result = string.Empty; 54 while ((readChar=reader.Read()) != -1) 55 { 56 result += (char)readChar; 57 } 58 Console.WriteLine("使用StreamReader.Read()方法得到Text文件中的数据为 : {0}", result); 59 } 60 61 /// <summary> 62 /// 使用StreamReader.ReadBlock()方法 63 /// </summary> 64 /// <param name="reader"></param> 65 public static void DisplayResultStringByUsingReadBlock(StreamReader reader) 66 { 67 char[] charBuffer = new char[10]; 68 string result = string.Empty; 69 reader.ReadBlock(charBuffer,0,10); 70 for (int i = 0; i < charBuffer.Length; i++) 71 { 72 result += charBuffer[i]; 73 } 74 Console.WriteLine("使用StreamReader.ReadBlock()方法得到Text文件中前10个数据为 : {0}", result); 75 } 76 77 78 /// <summary> 79 /// 使用StreamReader.ReadLine()方法 80 /// </summary> 81 /// <param name="reader"></param> 82 public static void DisplayResultStringByUsingReadLine(StreamReader reader) 83 { 84 int i=1; 85 string resultString = string.Empty; 86 while ((resultString=reader.ReadLine() )!= null) 87 { 88 Console.WriteLine("使用StreamReader.Read()方法得到Text文件中第{1}行的数据为 : {0}", resultString, i); 89 i++; 90 } 91 92 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述