StreamReader与StreamWriter
StreamReader实现了抽象基类TextReader类,而StreamWriter实现了抽象基类TextWriter。分别用于对流的读取与写入。
先从StreamReader说起
一、构造方法

StreamReader(Stream) 为指定的流初始化 StreamReader 类的新实例。
StreamReader(String) 为指定的文件名初始化 StreamReader 类的新实例。
StreamReader(Stream, Boolean) 用指定的字节顺序标记检测选项,为指定的流初始化 StreamReader 类的一个新实例。
StreamReader(Stream, Encoding) 用指定的字符编码为指定的流初始化 StreamReader 类的一个新实例。
StreamReader(String, Boolean) 为指定的文件名初始化 StreamReader 类的新实例,带有指定的字节顺序标记检测选项。
StreamReader(String, Encoding) 用指定的字符编码,为指定的文件名初始化 StreamReader 类的一个新实例。
StreamReader(Stream, Encoding, Boolean) 为指定的流初始化 StreamReader 类的新实例,带有指定的字符编码和字节顺序标记检测选项。
StreamReader(String, Encoding, Boolean) 为指定的文件名初始化 StreamReader 类的新实例,带有指定的字符编码和字节顺序标记检测选项。
StreamReader(Stream, Encoding, Boolean, Int32) 为指定的流初始化 StreamReader 类的新实例,带有指定的字符编码、字节顺序标记检测选项和缓冲区大小。
StreamReader(String, Encoding, Boolean, Int32) 为指定的文件名初始化 StreamReader 类的新实例,带有指定字符编码、字节顺序标记检测选项和缓冲区大小。

二、公共属性
BaseStream 返回基础流。
CurrentEncoding 获取当前 StreamReader 对象正在使用的当前字符编码。
EndOfStream 获取一个值,该值表示当前的流位置是否在流的末尾。
三、公共方法

Close 关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。 (重写 TextReader..::.Close()()()。)
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
DiscardBufferedData 允许 StreamReader 对象丢弃其当前数据。
Dispose 已重载。
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
MemberwiseClone 已重载。
Peek 返回下一个可用的字符,但不使用它。 (重写 TextReader..::.Peek()()()。)
Read 已重载。 读取输入流中的下一个字符或下一组字符。
ReadBlock 从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。 (继承自 TextReader。)
ReadLine 从当前流中读取一行字符并将数据作为字符串返回。 (重写 TextReader..::.ReadLine()()()。)
ReadToEnd 从流的当前位置到末尾读取流。 (重写 TextReader..::.ReadToEnd()()()。)

以下是StreamReader类的示例代码:

static void Main(string[] args)
{
FileStream fs = new FileStream(@"D:\text.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs); Stream stream = sr.BaseStream; //返回基流
Console.WriteLine(stream.GetType()); //输出 System.IO.FileStream
Console.WriteLine(sr.CurrentEncoding); //当前流读取器使用的编码,默认是本机编码(当构造器不指定时),如果构造方法指定了,输出的就是构造方法指定的编码
Console.WriteLine(sr.EndOfStream); //输出False 指示当前流的位置是否在流的结尾 string str = sr.ReadToEnd(); //此方法对于不能使用Length的流非常有用,比如压缩流 从当前位置读取到流结尾
Console.WriteLine(str); //输出 D:\text.txt文本的内容 fs.Seek(3, SeekOrigin.Begin); //便宜开始为3,UTF8,1个字节占用4个字符(0,1,2,3)
string str1 = sr.ReadLine(); //输出D:\text.txt的第一行文本
Console.WriteLine(str1); string str2 = sr.ReadLine();
Console.WriteLine(str2); //输出D:\text.txt 的第二行文本 Console.WriteLine("-----------------------");
fs.Seek(3, SeekOrigin.Begin); char[] chars = new char[10];
sr.Read(chars, 0, 10); //将前11个字符读取到 字符数组 (从0开始)
for (int i = 0; i < chars.Length; i++)
{
Console.WriteLine(chars[i]);
} Console.WriteLine("==============");
Console.WriteLine(Convert.ToChar(sr.Read())); //输出的数字,要转换为字符之后才是下一个字符 using (StreamReader sr1 = new StreamReader(@"D:\text.txt", Encoding.UTF8))
{
int s = 0;
while ((s = sr1.Read()) != -1) //注意要用个int s来记录读取到的字符,因为每调用一次Read()方法,位置都会前进一位
{
Console.Write(Convert.ToChar(s)); //输出所有字符
}
} Console.WriteLine("..................");
using (StreamReader sr3 = new StreamReader(@"D:\text.txt", Encoding.UTF8))
{
Console.WriteLine(Convert.ToChar(sr3.Peek())); //输出 文本的第一个字
} Console.ReadKey();
}

StreamWriter类
一、属性
AutoFlush 获取或设置一个值,该值指示 StreamWriter 是否在每次调用 StreamWriter..::.Write 之后,将其缓冲区刷新到基础流。
BaseStream 获取同后备存储区连接的基础流。
Encoding 获取将输出写入到其中的 Encoding。 (重写 TextWriter..::.Encoding。)
FormatProvider 获取控制格式设置的对象。 (继承自 TextWriter。)
NewLine 获取或设置由当前 TextWriter 使用的行结束符字符串。 (继承自 TextWriter。)
二、方法
Close 关闭当前的 StreamWriter 对象和基础流。 (重写 TextWriter..::.Close()()()。)
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
Dispose 已重载。
Finalize 已重载。
Flush 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。 (重写 TextWriter..::.Flush()()()。)
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
MemberwiseClone 已重载。
Write 已重载。 写入流。
WriteLine 已重载。
StreamWriter类示例:

static void Main(string[] args)
{ StreamWriter sw = new StreamWriter(@"D:text.txt");
Console.WriteLine(sw.AutoFlush); //输出 False是否每次调用sw后将缓冲区刷新到基础流
Console.WriteLine(sw.BaseStream.GetType()); //输出 FileStream 直接写路径的基流是FileStream
Console.WriteLine(sw.Encoding); //System.Text.UTF8Encoding
Console.WriteLine(sw.FormatProvider); //zh-CN
Console.WriteLine(sw.NewLine.ToString()); //当前TextWriter使用的行结束符字符串 sw.WriteLine("123123123"); //一次写入一行
sw.Flush(); //有缓冲区,要强制输出缓冲区内的数据,才真正显示
sw.WriteLine("123123123");
sw.Flush(); sw.Write("测试测试测试测试测试测试"); //其实就相当于调用了基流的Write方法
sw.Flush(); Console.ReadKey();
}

今天遇到一个非常有趣的需求,需求太长说不明。但是可以理解为,仅仅需要读取文本的第一行。因为如果整个文本读取出来再获得第一行的话,比较占用内存。因为那个文本足足有几M大。因此用到了StreamReader的ReadLine()方法。DEMO如下:

class Program
{
static void Main(string[] args)
{
using (FileStream fs = new FileStream(@"D:\sql.txt", FileMode.Open, FileAccess.Read))
{
StreamReader sr = new StreamReader(fs);
string line1 = sr.ReadLine();
Console.WriteLine(line1); //输出 111111111111
} Console.ReadKey();
}
}

其中 被读取的文本内容如下:
111111111111
222222222222
333333333333
444444444444
555555555555
StreamReader与StreamWriter的更多相关文章
- C#对文件/目录的操作:Path、File、Directory、FileStream、StreamReader、StreamWriter等类的浅析
以下类的命名空间都是:System.I/0; 一.Path:主要对文件路径的操作! 常用方法: String path=@"C:\a\b\c\123.txt"; 1-1.Path. ...
- 文件流操作(FileStream,StreamReader,StreamWriter)
大文件拷贝: /// <summary> /// 大文件拷贝 /// </summary> /// <param name="sSource"> ...
- StreamReader 和 StreamWriter 简单调用
/* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ####### ...
- C#基础学习之StreamReader和StreamWriter
StreamReader和StreamWriter操作字符的 FileStream操作字节的 //使用StreamReader读取文件 using (StreamReader sr=new Strea ...
- StreamReader和StreamWriter中文乱码问题
StreamReader和StreamWriter中文乱码问题 1.写入: string FilePath = @"E:\Measure.csv"; StreamWriter w ...
- File FileStream StreamReader和StreamWriter
File 静态类 ReadAllBytes 和 WriteAllBytes ,用于一次性全部读取和写入小文件的字节码, ReadLine ReadkAll 用于一 ...
- C#--几个数据流Stream;StreamReader;StreamWriter;MemoryStream;BufferStream;
命名空间:System.IO; Stream: 各种流的基类,不能时行查找操作,Position属性不能修改.读取时不Position不会自动移动, HttpWebRequest webreq = ( ...
- 文件流StreamReader和StreamWriter的使用
using (StreamReader sr = new StreamReader(@"C:\Users\shuai\Desktop\文件流读取.txt", Encoding.De ...
- 使用StreamReader与StreamWriter进行文本文件读写
namespace filetest { class FileUtil { public static void WriteFile(string file) { using (FileStream ...
随机推荐
- AT89C 系列单片机解密原理
单片机解密简单就是擦除单片机片内的加密锁定位.由于AT89C系列单片机擦除操作时序设计上的不合理.使在擦除片内程序之前首先擦除加密锁定位成为可能.AT89C系列单片机擦除操作的时序为:擦除开始---- ...
- DB2 中日期 比较
在DB2中的Date 一共识别三种格式,最常见的是这样 '2013-12-12' 对,你没看错,DB2认为这样的字符串就是Date数据 然后我们可以利用函数这样寻找日期区间 select * from ...
- SQLServer 循环1百万插入测试数据
1,首先创建student表 create table student ( sno int primary key , sname VARCHAR(200) ) 2,--向数据库中插入100万条随机姓 ...
- python高级编程 编写一个包1
#目的是:编写,发行python包可重复过程"""1:是缩短开始真正工作之前所需要的设置时间,也就是提供模板2:提供编写包的标准化方法3:简化测试驱动开发方法的使用4:为 ...
- AJAX实现google搜索建议实战
搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下: 整体思路: 在客户端搜索框中触发onkeyup事件, 随时向PHP服务器请求当前输入框中的内容, PHP服务器获取到keywords ...
- Pure Css 菜单的使用
本人新手,之前偶尔接触Bootstrap,也做过一些响应式开发,但是都是略显皮毛,公司的业务需求也限制了深入学习. 现着手Pure Css学习,尝试了简单的左边菜单自动隐藏的demo.闲话少说,代码贴 ...
- 文件读写IO
摘要:本文主要总结了以下有关文件读写的IO,系统调用与库函数. 1.初级IO函数:close,creat,lseek,open,write 文件描述符是一个整型数 1.1close 1.2int cr ...
- vc10的C2664和C2065错误
在vs2010中编译一个普通的C++程序(Win32 Console Application),都会出现这两个错误! 究其原因是:我们已经习惯了VC6的种种简陋和不规范! 例如,下列程序在VC6中编译 ...
- Android日志系统Logcat源代码简要分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6606957 在前面两篇文章Android日志系 ...
- map的类型映射
以下是使用STL中map类型,对类型的转换示例,主要可以解决的问题,也就是一般的类型之间的相互转换,可以较好的解决相关的问题. 以下是C++源码,比较简短,容易理解的. #include " ...