C# - StreamWriter与StreamReader 读写文件 101
wptr33 2025-04-29 05:36 35 浏览
读写文本文件的方式:
1)File静态类的File.ReadAllLines();与File.WriteAllLines();方法进行读写
2)FileStream实例类的对象fs.Read();与fs.Write();方法进行读写
使用第一种方式的缺点:如果文件容量过大使用其方法会一次性读取进内存,占用内存过多可能导致电脑死机或崩溃,因此出现了第二种读写方式
使用第二种方式的缺点:可能会丢失数据;假设共有10个字节,有可能只会读取9个字节
第三种读写的方式(专用于文本文件):
3)StreamWriter与StreamReader实例类可以说是专门用于对文本文件的处理,此方式对读写文本文件有优化
其优点是:1)每次只读写文件中的一行 2)不需要进行文本与字节间的相互转换
Stream是抽象类无法进行实例化,因此需要通过其子类StreamWriter与StreamReader进行辅助处理;两个类是非托管资源,因此需要使用using进行包裹,用于释放占用的资源
StreamWriter写入文件
使用有三个参数的构造方法的对象:1)源文件 2)追加还是覆盖 3)设置编码方式
//参数1 向哪个文件中写入内容
//参数2 true 表示追加内容 false 表示覆盖内容(会将文件的原有内容完全删除)
//参数3 指定编码方式,否则容易出现乱码
//这里的gb2312 相当于 记事本的 ANSI
using (StreamWriter sw = new StreamWriter(@"d:\test\2.txt", true, Encoding.GetEncoding("gb2312")))
{
//将文本内容追加到源文件中的尾部
sw.WriteLine("这是第三种读写文本文件的方式");
}StreamReader读取文件
使用有两个参数的构造方法的对象:1)源文件 2)设置为原来的编码方式
using (StreamReader sr = new StreamReader(@"d:\test\8.txt", Encoding.GetEncoding("gb2312")))
{
//使用循环读取每一行的内容
//EndOfStream属性:用于判断是否读取到流的末尾
//条件:当没有读取到流的末尾进入循环再次读取
while (!sr.EndOfStream)
{
//每调用一次sr.ReadLine()就读取一次
Console.WriteLine(sr.ReadLine());
}
}示例:将文件中的薪资(网络搜索,不足为凭)读取出来乘3倍并输出显示
string source = @"d:\test\salary.txt";
if (File.Exists(source))
{
using (StreamReader sr = new StreamReader(source, Encoding.GetEncoding("gb2312")))
{
using (StreamWriter sw = new StreamWriter(@"d:\test\salary1.txt"))
{
string result;
while ((result = sr.ReadLine()) != null)
{
//1:IT行业:12000 将读取的数据以:进行分隔
string[] parts = result.Split(':');
//parts[2]就是12000
parts[2] = (Convert.ToInt32(parts[2]) * 3).ToString();
string newStr = string.Join(":", parts);
sw.WriteLine(newStr);
Console.WriteLine(newStr);
}
}
}
}
else
{
Console.WriteLine("salary.txt 文件不存在");
}
Console.ReadKey();当读取大量文本文件时推荐使用StreamWriter与StreamReader而不是FileStream,类似大量字符串拼接都使用StringBuilder类而使用" + "号拼接
FileStream用于操作字节的(任何文件)StreamWriter与StreamReader用于操作字符的(文本)
无论静态类File还是实例类FileStream的ReadLine()读取方法底层都是调用StreamReader类的ReadLine()方法
- 上一篇:如何用c#优雅的写函数式
- 下一篇:SQL执行顺序(SqlServer)
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
