Stream篇(3)【StreamReader】

说明:实现一个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是否已经出去当前流的末尾

三、实例

View Code
 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         }

 

 

你可能感兴趣的:(Stream)