黑马程序员-文件流的读取
文件的读取:
使用文件流进行读取文件.使用StreamReader对象.与写入数据类似.读取文件也需要将内存和磁盘连接起来.然后使用StreamReader 去读取数据.
1.创建FileStream 连接到硬盘中的文件.
static void Main(string[] args)
{
Filestream fs=new FileStream(@"C:\test.txt",FileMode.Open,FileAccess.Read);
}
需要提前引入命名空间System.IO.
因为是读取,所以FileMode是Open ,FileAccess是Read.
2.创建读流.StreamReader
static void Main(string[] args)
{
Filestream fs=new FileStream(@"C:\test.txt",FileMode.Open,FileAccess.Read);
StreamReader sr=new StreamReader(fs);
}
3.开始读取数据.
读取数据有常用的三个方法.
Read 读取一个字符.并将文件指针指向下一位.再调用read读取下一个字符.
ReadLine 一次读取一行.再调用时读取下一行
ReadToEnd 读取所有的数据
Read方法:
方法原型:
public int Read();
该方法读取文件的指针指向一个Unicode编码,并将当前指针移到下一位等到再次调用Read方法的时候.读取下一个字符,如果已经是最后一个了就返回-1.
使用时.由于读取的是Unicode编码,需要使用强制类型转换成字符.
代码:
static void Main(string[] args)
{
FileStream file = new FileStream(“D:\\test.txt”, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamRaader(file);
using(file)
{
using(reader)
{
int temp;
while((temp = reader.Read()) != -1)
{
Console.Write((char)temp);
}
}
}
}
注意使用文件流最好使用using操作.会自动释放资源.
定义一个临时变量temp ,存储读取的字符的Unicode编码
使用循环,看看temp的数据是否为-1,如果等于-1,则数据读取完了则跳出循环.
如果不为-1就继续读取.把每一次读取的数据都强制转换后输出.
ReadLine方法:
方法原型:
public string ReadLine();
该方法读取指针当前所在行的数据.并且以字符串的形式返回,然后将指针移到下一行.等待读取下一行的数据.如果读取到最后一行的时候就返回null.
所以我们只需要判断读取的行数的指针的值就可以判断是否读到最后一行.
代码:
static void Main(string[] args)
{
FileStream file = new FileStream(“D:\\test.txt”, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamRaader(file);
using(file)
{
using(reader)
{
string temp;
while((temp = reader.ReadLine()) != null)
{
Console.WriteLine(temp);
}
}
}
}
ReadToEnd方法:
方法原型 :
public string ReadToEnd();
如果要读取所有的数据.那么选择该方法是一个很好的选择.因为不用考虑什么时候有数据.什么时候没有数据的问题.该方法是一次性将文件中的数据全部读取出来返回一个字符串.
代码:
static void Main(string[] args)
{
FileStream file = new FileStream(“D:\\test.txt”, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamRaader(file);
using(file)
{
using(reader)
{
string temp = reader.ReadToEnd();
Console.WriteLine(temp);
}
}
}
对于文件的读取写入实际上是很重要的.不论是什么数据.都需要把数据保存在磁盘中.便于查阅和修改.如果程序在运行时出现了异常.一般不可能把程序停止.但是维护的人员需要多代码进行维护修改.
所以出现了什么异常之后应该把异常写如一个文本中.以便于修改.
这里就出现了把字符串追加到文件中.
代码:
try {
// 异常的代码
}
catch(Exception ex)
{
using(FileStream file = new FileStream(“log.txt”, FileMode.Append, FileAccess.Write))
{
using(StreamWriter writer = new StreamWriter(file))
{
writer.WriteLine(ex.Message);
}
}
}
就把异常的信息追加到文本中了.