中职语文出版社《面向对象程序设计C#》单元10 ATM系统安全存储模块教案

资源下载
  1. 二一教育资源

中职语文出版社《面向对象程序设计C#》单元10 ATM系统安全存储模块教案

资源简介

单元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 Delete
If(!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)

展开更多......

收起↑

资源预览