资源简介 单元10 ATM系统安全存储模块课 时本章目标: 了解System.IO命名空间 掌握文件和文件夹的常用操作方法 使用文件流读写文本文件 使用文件流读写二进制文件 掌握打开文件、保存文件对话框的使用 了解序列化和反序列化本章重点: 掌握文件和文件夹的常用操作方法本章难点: 理解多态的概念内容讲解:文件操作1、知识点文件操作了解File类,File类是一个密封类,因此不能被继承。File类包含用于处理文件的静态方法方 法 描 述Create(string filePath) 在指定路径下创建指定名称的文件,返回一个FileStream对象Copy(string sourceFile, string desFile) 按指定路径将源文件中的内容复制到目标文件中,如果目标文件不存在将新建目标文件Delete(string filePath) 删除指定路径的文件Exists(string filePath) 验证指定路径的文件是否存在Move(string sourceFile, stringdesFile) 移动文件,如果原文件和目标文件在同一个文件夹下则可以实现对文件重命名例如,创建一个在d盘文件夹text引入IO,是文件的类判断文件夹存在,需要Directory类,该类提供了拷贝、删除,移动。该类提供了Exists、move DeleteIf(!Directory.Exists(“”“D:\\text”))//判断是否存在{//创建文件Directory.CreateDirectory(“D://text”)If(Directory.Exists(“”“D:\\text”)){cw(已经创建好)}2)创建文件FileStrem fs=new FileStream(“D:text/test”,fileNode.OpenOrCreate,FileAcess.ReadOrWrite)StreamWrite sw=new StraemWrite(fs);Sw.WriteLine(“写入内容”);Sw.close();3)读取文件FileStrem fs=new FileStream(“D:text/test”,fileNode.OpenOrCreate,FileAcess.ReadOrWrite)StreamReader sr=new StreamReader(fs);String s=sr.readLine();tringBuilder sb=new StringBuilder(s)二进制文件的读取与保持:System.IO命名空间中有BinaryReader类和BinaryWriter类,这两个类用来读写二进制数据。表10-7列出了BinaryReader类的常用方法。下面的代码演示了如何使用BinaryWriter类将二进制数据写入文件。using System;using System.Collections.Generic;using System.Text;using System.IO;namespace BinaryReadWrite{class Program{static void Main(string[] args){Console.WriteLine("请输入文件名:");string fileName = Console.ReadLine();FileStream fs = new FileStream(fileName,FileMode.Create);BinaryWriter bw = new BinaryWriter(fs);for (int i = 0; i < 10; i++){bw.Write(i);}Console.WriteLine("数字已写入文件!");bw.Close();fs.Close();}}}上面的代码接收用户输入的文件名,并创建一个FileStream实例。为了向文件写入二进制数据,程序创建了一个BinaryWriter类的实例,并用其Write()方法将0~9的十个整数写入文件,程序运行效果如图10-2所示。图10-2下面的代码从刚才的二进制文件中读取数据并显示出来:static void Main(string[] args){Console.WriteLine("请输入要读取的文件名:");string fileName = Console.ReadLine();if (!File.Exists(fileName)){Console.WriteLine("文件不存在!程序结束");return;}FileStream fs = new FileStream(fileName,FileMode.Open,FileAccess.Read);BinaryReader br = new BinaryReader(fs);try{while (true){Console.WriteLine(br.ReadInt32() );}}catch (EndOfStreamException eof){Console.WriteLine("已到文件结尾!");}finally{br.Close();fs.Close();}}再来看一个示例。该示例采用二进制文件读写方式将C盘的test.jpg文件复制到D盘。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace CopyJPG{class Program{static void Main(string[] args){FileStream fs1 = new FileStream("c:\\test.jpg", FileMode.Open,FileAccess.Read);BinaryReader br = new BinaryReader(fs1);byte[] b = br.ReadBytes((int)fs1.Length);//读取文件信息br.Close();fs1.Close();FileStream fs2 = new FileStream("d:\\test.jpg", FileMode.Create);BinaryWriter bw = new BinaryWriter(fs2);bw.Write(b); //将读出来的字节数组写入到文件中Console.WriteLine("图片复制成功!!!");bw.Close();fs2.Close();}}}序列化就是将对象的状态存储到特定的文件中。在序列化过程中,对象的公有成员、私有成员还有类名都转换成数据流的形式存储到文件中。然后在应用程序需要的时候,进行反序列化,把存储到文件中的数据再还原成对象。下面通过一个示例来讲解如何将对象进行序列化。using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;namespace SerializableTest{[Serializable]public class Student{public int stuid;public int age;public string name;}public class Test{public static void Main(){Student obj = new Student();obj.stuid = 1;obj.age = 24;obj.name = "姚明";BinaryFormatter formatter = new BinaryFormatter();FileStream stream = new FileStream(@"d:\MyFile.bin", FileMode.Create, FileAccess.Write);formatter.Serialize(stream, obj);stream.Close();Console.WriteLine("序列化成功!");}}}首先要引入三个命名空间,因为要使用到FileStream,所以要引入System.IO命名空间,然后是引入System.Runtime.Serialization和System.Runtime.Serialization.Formatters.Binary。Serialization单词就是序列化的意思,Binary是二进制的意思,引入这两个命名空间,就是要将Student对象序列化为二进制文件。要注意的是,在上面的示例中,定义了两个类,在定义Student类的上面加了一行[Serializable]代码。这个[Serializable]用来告诉系统,下面的类是可序列化的。只有前面加了[Serializable]代码的类,才能进行序列化。BinaryFormatter是一个二进制格式化类,通过它来将对象序列化为二进制文件。调用formatter.Serialize()方法开始序列化。这时会发现D盘下多了一个文件MyFile.bin下面的示例演示了反序列化的语法:using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;namespace SerializableTest{class UseTest{public static void Main(){BinaryFormatter formatter = new BinaryFormatter();FileStream strem = new FileStream(@"d:\MyFile.bin", FileMode.Open, FileAccess.Read);Student obj = (Student)formatter.Deserialize(strem);Console.WriteLine("stuid:{0}", obj.stuid);Console.WriteLine("age:{0}",obj.age);Console.WriteLine("name:{0}", obj.name);}}}反序列化的语法和序列化的语法非常相似,BinaryFormatter类的Deserialize()方法将指定文件反序列化为Student对象,示例输出了对象的三个成员变量教育改变生活(We Are Changing) 展开更多...... 收起↑ 资源预览