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是否已经出去当前流的末尾

三、实例

 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         }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

sql server 获取每一个类别中值最大的一条数据

SELECT  * FROM    (           SELECT    * ,                     ROW_NUMBER() OVE...

3771
来自专栏乐沙弥的世界

PL/SQL 集合的方法

    PL/SQL中提供了常用的三种集合联合数组、嵌套表、变长数组,而对于这几个集合类型中元素的操作,PL/SQL提供了相应的函数或过程来操 纵数组中的元素...

853
来自专栏C#

DotNet项目中的一些常用验证操作

   在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可...

1819
来自专栏菩提树下的杨过

无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(3)删除记录

-- ============================= -- Author:  <杨俊明,Jimmy.yang@cntvs.com or yjmyz...

2098
来自专栏Java呓语

第9章、语言结构

字符串是包含在单引号(')或双引号(")字符中的字节或字符序列。 以下几行例子是等同的:

933
来自专栏java沉淀

java 后台实现查询号码归属地

1814
来自专栏JavaEE

mybatis的association以及collection的用法association:一对一关联(has one)collection:一对多关联(has many)

6148
来自专栏Java学习之路

Hibernate学习---单表查询

我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然...

3017
来自专栏desperate633

第14课 组合查询创建组合查询union的使用规则

组合查询很容易理解就是讲多个查询的结果放在一起显示 使用UNION关键字进行查询的组合

742
来自专栏C/C++基础

C++ Hash表模板

利用C++类模板实现任意类型的Hash表,提供的功能有: (1)指定shmkey或内存地址创建Hash表; (2)获取指定key元素; (3)遍历指...

5324

扫码关注云+社区

领取腾讯云代金券