说明:实现一个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 }