C#基础知识及题目练习 Day8 文件操作 FileStream StreamWriter 序列化和反序列化
一、Path
1、GetFileName(); //获取文件名
2、GetFileNameWithoutExtention(); //获取不带扩展名的文件名称
3、GetExtension(); //获取扩展名
4、GetDirectionName(); 获得文件所在的文件夹的路径
5、GetFullPath(); 获得文件的完整路径
6、Path.Combine(); 将两个路径合并成一个路径
二、File
1、Create():创建文件
2、Delete():删除文件
3、Copy():复制文件
4、
1)读取文件(字节数组—》字符串)
ReadAllBytes():从文件中读取字节数组
Encoding.Default.GetString():将读取的字节数组转换为字符串
2)写入文件(字符串-》字节数组)
将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源
WriteAllBytes():创建一个新文件,将字节数组写入其中,关闭文件。
Encoding.Default.GetBytes():将字符串转换成字节数组
#region 写入文件(字符串-》字节数组)string inputFile = "今天天气好晴朗,处处好风光。";//将字符串转换成字节数组byte[] byteInput = Encoding.Default.GetBytes(inputFile);//File.WriteAllBytes():创建一个新文件,将字节数组写入其中,关闭文件。File.WriteAllBytes(@"E:\1.txt", byteInput);Console.WriteLine("写入成功");Console.ReadKey();#endregion
5、ReadAllLines():使用指定的编码读取所有行,然后关闭文件
ReadAllText():打开文件,使用指定的编码读取所有行,然后关闭文件
WriteAllLines():使用指定的编码创建一个新文件,然后写入文件
WriteAllText():使用指定的编码创建一个新文件,然后写入文件
AppendAllText():向现有文件中追加文本
6、绝对路径和相对路径
1)绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件
2)相对路径:文件相对于应用程序的路径
在开发中应尽量使用相对路径
三、编码格式
什么叫做编码:将字符串以什么样的形式保存为二进制
四、FileStream:操作字节
1、与File区别
File:一次性将文件全部读出,对内存造成的压力比较大,适合小文件操作,
FileStream: 一点点把文件读出,对内存造成的压力比较小,适合操作大文件。
2、FileStream fsRead=new FileStream(“路径”,“FileMode.OpenOrCreate”,”FIleAccess.Read”)
#region FileStream:操作字节// FileStream: 一点点把文件读出,对内存造成的压力比较小,适合操作大文件。FileStream fileRead = new FileStream(@"E:\1.txt", FileMode.OpenOrCreate, FileAccess.Read);//FileMode.OpenOrCreate 如果文件存在,则打开文件,把指针指到文件的开始;如果文件不存在,则新建文件//FileAccess.Read 读取文件byte[] buffer = new byte[1024 * 1024 * 5];//声明了一个字节数组,大小为5M。int rCount = fileRead.Read(buffer, 0, buffer.Length);// 0表示从那个字节读取数据 读取长度为buffer.Length 存放在buffer中//返回本次实际读到的有效字节数。Console.WriteLine(rCount);// 28? 25+3?string sFile = Encoding.Default.GetString(buffer, 0, rCount);//将字节数组buffer中的每一个元素(从0到r)按照默认的编码格式解码成字符串fileRead.Close();fileRead.Dispose();Console.WriteLine(sFile);//jttqhql,cchfg 13#endregion
r:实际读取到的有效字节。在解码的时候,只解码有效字节,剩余无效字节不再解码
3、将创建文件流对象的过程写在using当中,会自动帮我们释放流所占用的资源。
如果出现乱码问题,统一格式,如都改成utf-8
4、例:用FileStream完成多媒体文件的复制
思路:先将多媒体文件读取出来,然后写入到指定的位置
五、StreamReader与StreamWriter:操作字符
一、StreamReader读取文件
第1步:调用构造函数创建一个实例对象
构造函数:StreamReader(String path, Encoding)
第2步:调用构造函数的一个读取方法Readline
using (StreamReader sr = new StreamReader("StreamWriter.txt", Encoding.Default))
{
string str = null;//先声明一个字符串
while ((str = sr.ReadLine()) != null)//判断读取到的字符串是为null,如果为null,说明已经读取到文件末尾
{
Console.WriteLine(str);//将读取到的字符串打印到控制台
}
Console.ReadKey();
}
#region StreamWriter写入文件using (StreamWriter sWriter = new StreamWriter(@"E:\11.txt", true, Encoding.Default)){Console.WriteLine("请输入文本:");//提示用户输入字符串string strWrite = Console.ReadLine();//将用户输入的字符串赋值给strWritesWriter.WriteLine(strWrite);//将字符串写入到文本中Console.WriteLine("写入成功");}#endregion
二、StreamWriter写入文件
第1步:调用构造函数创建一个实例对象
构造函数:StreamWriter(String path, bool append, Encoding)
参数:
path:要写入文件的路径
append: true 若要将数据追加到该文件; false 覆盖该文件。 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件。
第2步:调用构造函数的一个写入方法WriteLine
using (StreamWriter sw = new StreamWriter("StreamWriter.txt", true, Encoding.Default))
{
Console.WriteLine("请输入文本:");//提示用户输入字符串
string str = Console.ReadLine();//将用户输入的字符串赋值给str
sw.WriteLine(str);//将字符串写入到文本中
}
#region StreamReader读取文件using (StreamReader sr = new StreamReader(@"E:\1.txt", Encoding.Default)){while (!sr.EndOfStream){Console.WriteLine(sr.ReadLine());}//string strStream = null;//先声明一个字符串//while ((strStream = sr.ReadLine()) != null)//判断读取到的字符串是为null,如果为null,说明已经读取到文件末尾//{// Console.WriteLine(strStream);//将读取到的字符串打印到控制台//}}#endregion
1、StreamWriter(“路径”,“是否追加到现有文件”);
六、序列化和反序列化
1、序列化:将对象转换为二进制
反序列化:将二进制转换为对象
作用:传输数据
2、序列化步骤
1)标记[Serialize]
2)用BinaryFormatter进行序列化或反序列化
Deserialize(Stream) 将指定的流反序列化成对象
Serialize(Stream, Object) 将对象序列化到给定的流
#region 用BinaryFormatter进行序列化或反序列化Person p = new Person();p.Sex = 1;p.Age = 21;p.Name = "张三";using (FileStream swBF = new FileStream(@"E:\11.txt", FileMode.OpenOrCreate, FileAccess.Write)){BinaryFormatter bfs = new BinaryFormatter();bfs.Serialize(swBF, p);//Serialize(Stream, Object) 将对象序列化到给定的流swBF.Close();}using (FileStream srBF = new FileStream(@"E:\11.txt", FileMode.OpenOrCreate, FileAccess.Read)){BinaryFormatter bfs = new BinaryFormatter();//?? 定义了一个类对象Person p2 = (Person)bfs.Deserialize(srBF);//Deserialize(Stream) 将指定的流反序列化成对象Console.WriteLine(p2.Sex);Console.WriteLine(p2.Name);Console.WriteLine(p2.Age);}Console.ReadKey();#endregion
拓:
序列化是把一个内存中的对象的信息转化成一个可以持久化保存的形式,以便于保存或传输,序列化的主要作用是不同平台之间进行通信,常用的有序列化有json、xml、文件等.
一、序列化为json
Json【javascript对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的。
C#中用于对象和json相互转换的原生类有两个:DataContractJsonSerializer和JavaScriptSerializer,其中JavaScriptSerializer主要用于web的浏览器和服务器之间的通信。
将一个json格式的字符串反序列化为对象是用DataContractJsonSerializer实例的ReadObject()方法
二、序列化为xml
C#中将对象序列化和反序列化为xml的类是XmlSerializer。将xml文件反序列化的方法是用XmlSerializer实例的Deserialize()方法
三、序列化为文件
C#中将对象序列化和反序列化为二进制文件的类是BinaryFormatter。通过BinaryFormatter类型实例的Deserialize()方法把二进制文本反序列化为对象
C#基础知识及题目练习 Day8 文件操作 FileStream StreamWriter 序列化和反序列化相关推荐
- Python基础知识(9):文件操作(IO技术)
目录 文本文件和二进制文件 文件操作相关模块概述 创建文件对象open() 文本文件的写入 基本的文件写入操作 常用编码介绍 ASCII ISO8859-1 GB2312,GBK,GB18030 UT ...
- c# 找出目录下的所有子目录_C# 基础知识系列- 14 IO篇 文件的操作(2)
前接上一篇内容. 如果是第一次捧场的小伙伴,为了您阅读的连贯性,烦请扫一眼<C# 基础知识系列- 14 IO篇 文件的操作(1)>.本篇是IO之文件操作的第二篇,介绍一下目录和路径的相关类 ...
- 软件测试基础知识面试题目(25题英文题目)
软件测试基础知识面试题目(25题英文题目) 1. Verification is: a. Checking that we are building the right system b. Chec ...
- 计算机网络最基础论文题目,计算机网络基础知识类论文题目 计算机网络基础知识论文题目哪个好...
[100道]关于计算机网络基础知识类论文题目汇总,作为大学生的毕业生应该明白了计算机网络基础知识论文题目哪个好,选一个好的题目后续的计算机网络基础知识论文写作起来会更轻松! 一.比较好写的计算机网络基 ...
- 零基础学lua第十天---文件操作
零基础学lua第十天-文件操作 一.前言 每个编程语言和都少不了对文件操作,lua中操作文件的方法非常简单,而且文件和输入输出操作都是使用的同一个库,可以说是相当方便了,下面我们来看下吧. 二.读取文 ...
- 计算机基础文件与文件夹,计算机基础知识 第03部分 操作系统 文件与文件夹管理.ppt...
文档介绍: 文件(夹)和程序的管理怕鄙扰蛆甩行陀渴侍往拽监扇散抑人蓟毒融莽斜撼熙掺拧茫炕惶甭喜妥超计算机基础知识第03部分操作系统文件与文件夹管理计算机基础知识第03部分操作系统文件与文件夹管理第3章 ...
- 应用层与基础知识(题目完成)
b 其他基础知识补充 简述因特网标准制定的几个阶段? 第一章 物理媒介 三大交换 电路与分组交换 安全 加密 扩展 第二章 网络应用编程 应用层 HTTP FTP(带外传送) STMP POP3邮件访 ...
- 微型计算机系统中 麦克风属于,模块1-2 计算机基础知识测验题目(50小题)
模块一计算机基础知识测试题(二) 1.用8个二进制位能表示的最大的无符号整数等于十进制整数______. A.127 B.128 C.255 D.256 2.在计算机的存储单元中存储的______. ...
- python中二进制文件_Python学习基础篇 -6: Python中的文件操作
前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 . 文件有有什么用 文件可以看作一个仓库 ...
最新文章
- 她92年的,27岁,当上浙大博导。
- Android全局修改字体大小,Android 仿微信全局字体大小调整
- XML——使用 XPath来定位信息+使用命名空间
- Win7系统中用anaconda配置tensorflow运行环境
- 【JavaScript代码实现四】获取和设置 cookie
- 第一个程序 快速编译链接的办法
- jupyter新建文件_Jupyter渲染网页的3种方式
- 程序员父亲的遗产——编程十诫 转载
- 【宏编程】word统一修改图片样式
- python求最大值代码的方式_python使用分治法实现求解最大值的方法
- 一次学会b站视频下载_合并_剪辑,亲测有效~
- steam无法连接至计算机,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
- java dao 单元测试,你应该如何单元测试DAO层
- Springboot集成rabbitmq
- 感动世界的50首歌和他们背后的故事3
- yoyo跑_yoyo主持人5岁女儿照片曝光 其老公魏哲浩个人资料简介
- 解决windows xp 局域网共享
- 阿里云域名相关操作(购买、解析、备案)
- MySQL报错: SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine
- 电脑最为忌讳的小动作