TextReader/TextWriter 的类

时间:2022-10-20 16:01:31

 TextReader以及TextWriter这两个类,非常有用,很多方法都接受它们作为参数。

  TextReader有两个子类:

  1. StringReader/StringWriter 用于读取字符串;
  2. StreamReader/StreamWriter 用于读取流;

一、StringReader的作用

  StringReader主要用于读取字符串。

  常用方法如下:

成员 说明
Close 关闭 StringReader
Peek 返回下一个可用的字符,但不使用它
Read 读取输入字符串中的下一个字符并将该字符的位置提升一个字符,重载可提升任意个字符
ReadAsync 读取字符的指定最大数量从当前字符串异步和数据写入缓冲区,从指定索引处开始
ReadBlock 从当前文本读取器中读取指定数目的字符并从指定索引开始将该数据写入缓冲区
ReadBlockAsync 读取字符的指定最大数量从当前字符串异步和数据写入缓冲区,从指定索引处开始
ReadLine 读取一行字符从当前字符串并将数据作为字符串返回
ReadLineAsync 读取一行字符异步从当前字符串并将数据作为字符串返回
ReadToEnd 读取当前位置的任何字符。该字符串的末尾并将其返回作为一个字符串
ReadToEndAsync 读取当前位置的所有字符为字符串的结尾异步并将其返回作为一个字符串

  示例如下:

TextReader/TextWriter 的类
        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();
}
TextReader/TextWriter 的类

二、StreamReader的使用

  StreamReader属性:

属性 说明
BaseStream 返回基础流
CurrentEncoding 获取当前 StreamReader 对象正在使用的当前字符编码
EndOfStream 获取一个值,该值表示当前的流位置是否在流的末尾

  StreamReader方法:

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

  示例:

TextReader/TextWriter 的类
        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();
}
TextReader/TextWriter 的类

三、StringWriter的作用

  StringWirter主要用于对字符串进行读写。

  常用属性:

属性 说明
Encoding 获取将输出写入到其中的 Encoding
FormatProvider 获取控制格式设置的对象
NewLine 获取或设置由当前 TextWriter 使用的行结束符字符串

  常用方法:

方法 说明
Close 关闭当前的 StringWriter 和基础流
Dispose 释放StringWriter的资源
Flush 清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设备
GetStringBuilder 返回基础 StringBuilder
Write 写入到 StringWriter 的此实例中
WriteLine 写入重载参数指定的某些数据,后跟行结束符

  示例:

TextReader/TextWriter 的类
        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();
}
TextReader/TextWriter 的类

四、StreamWriter的作用

  StreamWriter用于将一段内容写入到流里面,包括FileStream,MemoryStream等各种流。

  属性:

属性 说明
AutoFlush 获取或设置一个值,该值指示 StreamWriter 是否在每次调用 StreamWriter.Write 之后,将其缓冲区刷新到基础流
BaseStream 获取同后备存储区连接的基础流
Encoding 获取将输出写入到其中的 Encoding

  方法:

方法 说明
Close 关闭当前的 StreamWriter 对象和基础流
Flush 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流
FlushAsync 异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中
Write 将字符写入流
WriteAsync 将字符异步写入该流
WriteLine 将字符写入该流,并加上结束符
WriteLineAsync 将行结束符异步写入该流

  示例:

TextReader/TextWriter 的类
        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 的类

TextReader/TextWriter 的类的更多相关文章

  1. c&num; TextReader&sol;TextWriter 的类

    TextReader以及TextWriter这两个类,非常有用,很多方法都接受它们作为参数. TextReader有两个子类: StringReader/StringWriter 用于读取字符串: S ...

  2. C&num;流总结&lpar;文件流、内存流、网络流、BufferedStream、StreamReader&sol;StreamWriter、TextReader&sol;TextWriter&rpar;

    一.文件流 FileStream类主要用于读写磁盘文件.常用于向磁盘存储数据或读取配置文件. 读取文件: //文件流:读取 FileStream fileStream = File.Open(@&qu ...

  3. C&num; XmlReader&sol;XmlWriter 类

    XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件.其实,在印象当中,XML很多的操作类都支持直接Save.Read也支持接受XmlReader与XmlWriter类的示 ...

  4. 文件读写(二)利用SteamReader和StreamWrite类处理字符串、FileSystemWatcher、BinaryReader&sol;BinaryWriter

    一.读写类: TextReader/TextWriter:文本读写,抽象类 TextReader,其派生类: StreamReader:以一种特定的编码从字节流中读取字符. StringReader: ...

  5. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  6. C&num;路径&sol;文件&sol;目录&sol;I&sol;O常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  7. Stream 流操作

     Stream 类 先看下面的图 Stream 是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream).流是字节序列的抽象概 ...

  8. IO操作 第一篇 学习(转载)

    问题8:如何使用通配符搜索指定目录内的所有文件: 解决方案: 使用DirectoryInfo.GetFiles方法的重载版本,它可以接受一个过滤表达式,返回FileInfo数组,另外它的参数还可以指定 ...

  9. c&num;基础语言编程-文件流操作

    引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...

随机推荐

  1. Backbone&period;js学习之二

    经历一段自我修炼,终于领悟到Backbone.js的关键知识点,也发现了原来MVC可以在前端这样梦幻的发挥,Backbone.js确实是一个很有魅力的前端MVC框架. 练就一门技术,需要有扎实的功底, ...

  2. mybatis java&period;lang&period;UnsupportedOperationException

    mybatis抛出下面的异常: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exc ...

  3. Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)

    题意: 你从家往学校赶,可以用步行和乘坐地铁这两种方式,步行速度为10km/h,乘坐地铁的速度为40KM/h.输入数据的第一行数据会给你起点和终点的x和y的坐标.然后会给你数目不超过200的双向地铁线 ...

  4. PostgreSQL的AnynonArray的例子

    程序: CREATE OR REPLACE FUNCTION kappend(anynonarray, anyelement) RETURNS text AS $$ ; $$ LANGUAGE SQL ...

  5. UVa 557 &lpar;概率 递推&rpar; Burger

    题意: 有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡.如果只剩一种汉堡,就不用抛硬币了. 求最后两个孩子吃到同一种汉堡的概率. 分析: 可以从反面思考,求最后两个孩子吃到不同汉堡 ...

  6. web前端常用小函数汇总

    //去掉html标签 function delHtmlTag(str) { var title = str.replace(/<[^>]+>/g, "");// ...

  7. mysql通过now&lpar;&rpar;获取的时间不对

    先用now()获取系统时间,发现时间不对(差8个小时): mysql> select now(); +---------------------+ | now() | +------------ ...

  8. express 连接数据库

    (1)创建项目 ,项目名cntMongodb express -e cntMongodbcd cntMonfodbnpm installnpm install mongoose --save //安装 ...

  9. MySQL JDBC驱动版本与MySQL数据库版本对应关系

    前言:前段时间发现在家使用和公司一样的mysql jdbc驱动版本发生了异常,原因:家里mysql数据库版本与公司不一致导致.查询了相关资料,发现mysql jdbc驱动版本与mysql数据库版本有一 ...

  10. C&num;一例绘制字体不清晰的解决办法

    public static Bitmap GetPieWithText(String text, Color color, Color fontColor,Font font) { ; Bitmap ...