StreamReader 类用于从流中读取字符串。它继承自 TextReader 类。StreamReader类是用于读取文本文件的类,必须实例化成对象后使用。
StreamReader 类构造函数:
函数名 | 说明 |
StreamReader(Stream stream) | stream参数从底层的Stream对象创建StreamReader的实例 |
StreamWriter(String path) | path参数为要读取的文件的全路径。 若path只是文件名则其默认父路径是:项目文件夹\bin\Debug\ |
StreamReader ( String path, bool detectEncodingFromByteOrderMarks ) | path参数是要读取文件的全路径,detectEncodingFromByteOrderMarks 参数是是否查找文件开头的字节顺序标记 |
StreamReader(String path,Encoding encoding) | path参数是要读取文件的全路径, encoding参数指定使用的编码规范参数 |
StreamReader 类属性:
属性名 | 说明 |
BaseStream | 返回基础流 |
CurrentEncoding | 获取当前StreamReader对象正在使用的当前字符编码 |
EndOfStream | 获取一个值,该值表示当前的流位置是否在流的末尾 |
StreamReader 类主要方法:
方法名 | 说明 |
void Close() | 关闭SteamReader |
Read() | 读取输入字符中的下一个字符 |
int Peek() | 获取流中的下一个字符的整数,如果没有获取到字符, 则返回 -1 |
String ReadLine() | 从基础字符中读取下一行 |
int ReadBlock( char[] buffer, int index, int count ) | 从当前流中读取最大count的字符并从index开始将该数据写入buffer |
string ReadToEnd() | 从整个流或流的当前位置读取到流的结尾 |
Encoding中常用的编码格式和说明:
编码格式 | 说明 |
Default | 操作系统当前的ANSI代码页的编码 |
Unicode | 使用Little-Endian字节顺序的UTF-16格式的编码 |
UTF-8 | UTF-8编码 |
StreamReader 类对应的是 StreamWriter 类,StreamWriter 类主要用于向流中写入数据。
StreamWriter 类构造函数:
构造方法 | 说明 |
---|---|
StreamWriter(Stream stream) | 为指定的流创建 StreamWriter 类的实例 |
StreamWriter(string path) | 为指定路径的文件创建 StreamWriter 类的实例 |
StreamWriter(Stream stream, Encoding encoding) | 用指定的字符编码为指定的流初始化 StreamWriter 类的一个新实例 |
StreamWriter(string path, Encoding encoding) | 用指定的字符编码为指定的文件名初始化 StreamWriter 类的一个新实例 |
StreamWriter 类中常用的属性和方法如下表:
属性或方法 | 作用 |
---|---|
bool AutoFlush | 属性,获取或设置是否自动刷新缓冲区 |
Encoding Encoding | 只读属性,获取当前流中的编码方式 |
NewLine | 属性,获取和设置有当前TextWriter使用的行结束符字符串 |
void Close() | 关闭流 |
void Flush() | 刷新缓冲区 |
void Write(char value) | 将字符写入流中 |
void WriteLine(char value) | 将字符换行写入流中 |
Task WriteAsync(char value) | 将字符异步写入流中 |
Task WriteLineAsync(char value) | 将字符异步换行写入流中 |
1.StreamReader读文本文件
//1.创建StreamReader 对象
using (StreamReader reader = new StreamReader("英汉词典TXT格式.txt", Encoding.Default))
{
//1.循环读取每一行数据。
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
Console.WriteLine(line);
}
//2.循环读取每一行数据。
string line = null;
int count = 0;
while ((line = reader.ReadLine()) != null)
{
count++;
Console.WriteLine(line);
}
//Console.WriteLine(count);
//3.判断文件中是否有字符
while (reader.Peek() != -1)
{
//读取文件中的一行字符
string str = streamReader.ReadLine();
Console.WriteLine(str);
}
}
Console.ReadKey();
2.从FileStream流创建StreamReader对象
static void Main(string[] args)
{
Console.Write("请输入文件路径及文件名:");
string mess = Console.ReadLine();
FileStream aFile = new FileStream(mess, FileMode.Open);
StreamReader sr = new StreamReader(aFile);//用FileStream对象实例化一个StreamReader对象
//strLine = sr.ReadToEnd();//读取完整的文件,如果用这个方法,就可以不用下面的while循环
strLine = sr.ReadLine();// 读取一行字符并返回
while (strLine != null)
{
Console.WriteLine(strLine);
strLine = sr.ReadLine();
}
sr.Close();
Console.ReadLine();
}
2.StreamWriter对象写入字符串
//创建一个StreamWriter
using (StreamWriter sw = new StreamWriter("test.txt", false, Encoding.UTF8))
{
//2.执行读写
for (int i = 0; i < 1000; i++)
{
sw.WriteLine(i + "======" + System.DateTime.Now.ToString());
}
sw.WriteLine("我是最好的,虽然现在不是");
sw.WriteLine("有信息,不一定会赢,但没有信心,肯定会输");
sw.WriteLine("我的期待月薪为{0,9:C4},实现年龄为{1,9},成功率{2,9:P2}", new Object[] { 20000, 30, 1 });
//刷新缓存
streamWriter.Flush();
}
Console.ReadKey();