TextReader/TextWriter 的类
TextReader以及TextWriter这两个类,非常有用,很多方法都接受它们作为参数。
TextReader有两个子类:
- StringReader/StringWriter 用于读取字符串;
- StreamReader/StreamWriter 用于读取流;
一、StringReader的作用
StringReader主要用于读取字符串。
常用方法如下:
| 成员 | 说明 |
| Close | 关闭 StringReader |
| Peek | 返回下一个可用的字符,但不使用它 |
| Read | 读取输入字符串中的下一个字符并将该字符的位置提升一个字符,重载可提升任意个字符 |
| ReadAsync | 读取字符的指定最大数量从当前字符串异步和数据写入缓冲区,从指定索引处开始 |
| ReadBlock | 从当前文本读取器中读取指定数目的字符并从指定索引开始将该数据写入缓冲区 |
| ReadBlockAsync | 读取字符的指定最大数量从当前字符串异步和数据写入缓冲区,从指定索引处开始 |
| ReadLine | 读取一行字符从当前字符串并将数据作为字符串返回 |
| ReadLineAsync | 读取一行字符异步从当前字符串并将数据作为字符串返回 |
| ReadToEnd | 读取当前位置的任何字符。该字符串的末尾并将其返回作为一个字符串 |
| ReadToEndAsync | 读取当前位置的所有字符为字符串的结尾异步并将其返回作为一个字符串 |
示例如下:

static void Main(string[] args)
{
TextReader tr = new StringReader("你在他乡还好吗?\n很好!");
string line1 = tr.ReadLine(); //读取一行
Console.WriteLine(line1); //你在他乡好好吗?
string line2 = tr.ReadLine();
Console.WriteLine(line2); //很好!
//注意到此处时,指针已到,末尾,注释掉上面4行才能看到效果
//Peek()是读,但不用,不会影响指针
while (tr.Peek() > 0)
{
Console.WriteLine((char)tr.Read()); //逐个读取所有字符
} char[] charArr = new char[4];
tr.ReadBlock(charArr, 1, 3);
for (int i = 0; i < charArr.Count(); i++)
{
Console.WriteLine(charArr[i]);
} Console.ReadKey();
}

二、StreamReader的使用
StreamReader属性:
| 属性 | 说明 |
| BaseStream | 返回基础流 |
| CurrentEncoding | 获取当前 StreamReader 对象正在使用的当前字符编码 |
| EndOfStream | 获取一个值,该值表示当前的流位置是否在流的末尾 |
StreamReader方法:
| 方法 | 说明 |
| Close | 关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源 |
| DiscardBufferedData | 清除内部缓冲区 |
| Dispose | 释放由 TextReader 对象使用的所有资源 |
| Peek | 返回下一个可用的字符,但不使用它 |
| Read | 读取输入流中的下一个字符并使该字符的位置提升一个字符 |
| ReadAsync | 异步从当前流中读取指定数目的字符并从指定索引开始将该数据写入缓冲区 |
| ReadBlock | 从当前流中读取指定数目的字符并从指定索引开始将该数据写入缓冲区 |
| ReadBlockAsync | 异步从当前流中读取指定数目的字符并从指定索引开始将该数据写入缓冲区 |
| ReadLine | 从当前流中读取一行字符并将数据作为字符串返回 |
| ReadLineAsync | 从当前流中异步读取一行字符并将数据作为字符串返回 |
| ReadToEnd | 从流的当前位置到末尾读取所有字符 |
| ReadToEndAsync | 异步读取从当前位置到流的结尾的所有字符并将它们作为一个字符串返回 |
示例:

static void Main(string[] args)
{
FileStream fs = new FileStream(@"D:\123.txt",FileMode.Open,FileAccess.Read);
TextReader tr = new StreamReader(fs,Encoding.Default);
string str = tr.ReadToEnd();
Console.WriteLine(str); Console.ReadKey();
}

三、StringWriter的作用
StringWirter主要用于对字符串进行读写。
常用属性:
| 属性 | 说明 |
| Encoding | 获取将输出写入到其中的 Encoding |
| FormatProvider | 获取控制格式设置的对象 |
| NewLine | 获取或设置由当前 TextWriter 使用的行结束符字符串 |
常用方法:
| 方法 | 说明 |
| Close | 关闭当前的 StringWriter 和基础流 |
| Dispose | 释放StringWriter的资源 |
| Flush | 清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设备 |
| GetStringBuilder | 返回基础 StringBuilder |
| Write | 写入到 StringWriter 的此实例中 |
| WriteLine | 写入重载参数指定的某些数据,后跟行结束符 |
示例:

static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
sb.Append("你在他乡还好吗?");
using (TextWriter tw = new StringWriter(sb))
{
tw.WriteLine("难混啊!");
Console.WriteLine(sb.ToString()); //输出你在他乡还好吗?难混啊!(后面有个换行符,Write则没有)
} Console.ReadKey();
}

四、StreamWriter的作用
StreamWriter用于将一段内容写入到流里面,包括FileStream,MemoryStream等各种流。
属性:
| 属性 | 说明 |
| AutoFlush | 获取或设置一个值,该值指示 StreamWriter 是否在每次调用 StreamWriter.Write 之后,将其缓冲区刷新到基础流 |
| BaseStream | 获取同后备存储区连接的基础流 |
| Encoding | 获取将输出写入到其中的 Encoding |
方法:
| 方法 | 说明 |
| Close | 关闭当前的 StreamWriter 对象和基础流 |
| Flush | 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流 |
| FlushAsync | 异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中 |
| Write | 将字符写入流 |
| WriteAsync | 将字符异步写入该流 |
| WriteLine | 将字符写入该流,并加上结束符 |
| WriteLineAsync | 将行结束符异步写入该流 |
示例:

static void Main(string[] args)
{
using (StreamWriter tw = new StreamWriter(@"D:\123.txt"))
{
tw.WriteLine("难混啊!");
Console.WriteLine(tw.BaseStream.GetType()); //输出FileStream
} Console.ReadKey();
}

TextReader/TextWriter 的类的更多相关文章
- c# TextReader/TextWriter 的类
TextReader以及TextWriter这两个类,非常有用,很多方法都接受它们作为参数. TextReader有两个子类: StringReader/StringWriter 用于读取字符串: S ...
- C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter)
一.文件流 FileStream类主要用于读写磁盘文件.常用于向磁盘存储数据或读取配置文件. 读取文件: //文件流:读取 FileStream fileStream = File.Open(@&qu ...
- C# XmlReader/XmlWriter 类
XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件.其实,在印象当中,XML很多的操作类都支持直接Save.Read也支持接受XmlReader与XmlWriter类的示 ...
- 文件读写(二)利用SteamReader和StreamWrite类处理字符串、FileSystemWatcher、BinaryReader/BinaryWriter
一.读写类: TextReader/TextWriter:文本读写,抽象类 TextReader,其派生类: StreamReader:以一种特定的编码从字节流中读取字符. StringReader: ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- Stream 流操作
Stream 类 先看下面的图 Stream 是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream).流是字节序列的抽象概 ...
- IO操作 第一篇 学习(转载)
问题8:如何使用通配符搜索指定目录内的所有文件: 解决方案: 使用DirectoryInfo.GetFiles方法的重载版本,它可以接受一个过滤表达式,返回FileInfo数组,另外它的参数还可以指定 ...
- c#基础语言编程-文件流操作
引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...
随机推荐
- Transposed Matrix
Transposed Matrix In linear algebra, the transpose of a matrix A is another matrix AT (also written ...
- linux centos6.4 php连接sql server2008
1.安装SQL Server驱动freetds yum search freetds yum install freetds php-mssql 或者下载编译安装 2.修改/etc/freetds ...
- 通用Makefile
本文推荐了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile. 在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增 ...
- 【HDU 4612 Warm up】BCC 树的直径
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4612 题意:一个包含n个节点m条边的无向连通图(无自环,可能有重边).求添加一条边后最少剩余的桥的数 ...
- ps查看内存占用排序
ps -eo rss,pmem,pcpu,vsize,args | sort -k 1 -r -n | less 解析一下: ps 都知道,是linux,unix显示进程信息的, -e 是显示所有进程 ...
- iOS多线程及其感悟
感觉每天都是匆匆忙忙的,每天似乎都是时间不够用一样,可是等真的想要动手敲代码的时候才发现,原来还有好多好多的知识点不是太熟练,所以,人不可以一直感觉自我良好, 有时间就是那种自我感觉良好的心态毁了自己 ...
- EffectiveC#16--垃圾最小化
1.申请和释放一个基于堆内存的对象要花上更多的处理器时间. 所以当一个引用类型的局部变量在常规的函数调用中使用的非常频繁时应该把它提升为对象的成员(方法一) 2.当你把一个实现了IDisposable ...
- C# Datatable导出Excel方法
C# 导出Excel方法 先引用下System.IO;System.data; 具体函数如下: public static bool ExportCSV(DataTable dt, string f ...
- oracle安装、配置、卸载、错误解决
oracle安装卸载的帖子很多,这里整理出一份,都只是给出一个链接,忘了时可以自己看看.哈哈,其实我也觉得已经不会忘了,被这个鸡毛问题困了两天,修改控制文件.环境变量.注册表什么的都不能解决问题,最后 ...
- NFinal简介
NFinalWeb框架是基于魔法糖语法思想创建的框架.本框架有两大特点.1.所有框架里最简单易学易配置的.2.所有框架里运行效率最快的. 相关介绍1.运行效率比任何php和java以及.net框架要快 ...