TextReader/TextWriter 的类

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

  TextReader有两个子类:

  1. StringReader/StringWriter 用于读取字符串;
  2. 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();
        }

 

posted on 2013-12-14 12:29  逆心 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/kissdodog/p/3474231.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值