FileStream
用于操作字节(所有的文件本质都是字节形式存放的),也就是可以操作任意类型的文件
这个文件流可以用于操作大文件,对内存压力小
StreamReader和StreamWriter:用于操作字符(字符串),方便用于操作文本文件,和FileStream一样,都是用于操作大文件,这个针对文本文件的读写。
FileStream和File类的区别
FileStream和File的区别:有两个水缸,一个空的,一个满水,要把满水的给全部倒入空的里,
File是把水缸扛起来,一次性把所有的水(文件)倒入另一个水缸,(对内存不友好,因为他是把文件一次性读到内存里面)
FileStream则是用勺子,一勺一勺的盛在另一个水缸(对内存友好)
FileStream读取文件
这里先用来读写文本文件举例子
//第一步,创建FileStream的对象
//FileStream实例化时必须要给构造函数传参数,,一般使用三个参数
//第一个参数:一般是文件的路径
//第二个参数,表示针对这个文件做的操作
//第三个参数,表示你对这个文件里面的数据要进行的操作
FileStream fileStreamRead = new FileStream(@"C:\Users\Admin\Desktop\Test\new.txt", FileMode.OpenOrCreate, FileAccess.Read);
//第二步,创建字节数组,用于存放读到的文件,用该数组的长度限定每次读取的文件的大小和数组大小一致
byte[] buffer = new byte[1024 * 1024 * 5];//每次读取5M到内存中,然后存到该字节数组
//第三步,调用读取的方法
//第一个参数,存放字节的数组,
//第二个参数,开始往字节数组里写入的位置
//第三个参数,每次读取的字节大小
//返回值,返回本次实际读取到的有效字节数,比如读一个3.5M的文件,你虽然给的是5M的空间,实际上也只返回3.5
int r = fileStreamRead.Read(buffer, 0, buffer.Length);
//第四步,将字节数组中每一个元素按照指定的编码格式解码成想要的格式,这里我们转解码为字符串
//GetString第一个参数,要解码的数组,第二个参数,从数组的哪个字节开始解码,第三个参数,解码的长度,如果不写第二个和第三个参数,你读的文件小于你数组的长度(小于5M),他会把数组里剩下的也解码成空来填充
string str = Encoding.Default.GetString(buffer, 0, r);//如果Default读出来乱码可以换成UTF8比如Encoding.UTF8.GetString(buffer, 0, r);
//第五步,关闭数据流:
fileStreamRead.Close();
//第六步,释放流所占用的资源,GC垃圾回收器无法帮我们释放数据流
fileStreamRead.Dispose();
//输出
Console.WriteLine(str);
FileStream写入文件
这里先用来读写文本文件举例子
借用using帮助释放资源,这样就不用手动关闭流和释放流,简化流程
//第一步,创建FileStream的对象
using (FileStream fsWrite = new FileStream(@"C:\Users\Admin\Desktop\Test\new.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
string str = "看我有没有把你覆盖";//准备写入的数据
byte[] buffer = Encoding.Default.GetBytes(str);//UTF的编码格式写如:Encoding.UTF8.GetBytes(str);
//需要的参数和读取的参数差不多
fsWrite.Write(buffer, 0, buffer.Length);
}
Console.WriteLine("写入成功");