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