C#总结3
第四章:文件管理
File类:
对于File类,里面的方法都是静态方法,就是直接可以用FIle来“.”;
记几个方法吧:File.Copy(string filename1,string filename2);
File.Exists(string filename);
File.Move(string filename1,string filename2);
File.Delete(string filename);
其他的在课本上看吧,没见考过;
但要注意一点,那个filename的格式是”C:\\1.txt”或者是@”C:\1.txt”;
FileStream类;主要是对文件流的操作:
例:
FileStream f1=File.Create(“C:\\1.txt”);//这是创建一个文件
还有下面的几个:
FileStream f1=File.CreateNew(“C:\\1.txt”);//创建一个新的,如果存在老的就报异常;
FileStream f1=File.Open(“C:\\1.txt”);//打开,如果没有也报异常
FileStream f1=File.OpenOrCreate(“C:\\1.txt”);//打开或者创建
FileStream f1=File.Append(“C:\\1.txt”);//已追加打开文件,指针放在文件的最后;
FileStream f1=File.Truncate(“C:\\1.txt”);//清空原来文件里的内容
对于文件的读取方式有三种:read write readwrite
怎么对文件进行读写:
第一种方式是:writebyte readbyte,一字节的方式读写;
如:f1.writebyte((byte)1);
F1.readbyte();
第二种:read write;批量的
使用这样的,要有一个缓存空间:
例;
Byte[] byt1=new byte[200]{,,,,,,,,,,,,,,,,,,,,};
F1.write(byt1,0,20)//写入byt1的0到20
Byte[] byt2=new byte[200];
F1.read(byt2,0,20);//读出前20个;
BinaryWriter类;二进制读取器;
作为一个工具来对文件进行读取
用法:
FileStream f1=File.Create(“C:\\1.txt”);
BinaryWrite bw1=new BinaryWrite(f1);
Bw1.write(参数);//写
BinaryRead类;二进制的读:
FileStream f1=File.Create(“C:\\1.txt”);
BinaryRead br1=new BinaryRead(f1);
文本读写器:
这个符合中国人的习惯:
StreamWrite,StreamRead
FileStream f1=File.Create(“C:\\1.txt”);
StramWrite bw1=new StreamWrite(f1);
Bw1.Write(参数);
对于读:
FileStream f1=File.Create(“C:\\1.txt”);
StramRead br1=new StreamRead(f1);
如果想读一定一定数量的:
要先设置一个缓存空间:char[] c=new char[10];
Br1.read(c,0,10)//读10个字符
还有几个方法:br1.readLine()//读一行
Br.ReadToEnd();//读到最后;
对于持久化:
看课本P179;
BinaryFormatter序列化方式 1、序列化新建一个Person对象me然后将其序列化保存到文件personInfo.txt中] var me = new Person { Sno = "200719", Name = "yuananyun", Sex="man", Age=22 }; //创建一个格式化程序的实例 IFormatter formatter = new BinaryFormatter(); //创建一个文件流 Stream stream = new FileStream("c:/personInfo.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); formatter.Serialize(stream, me); stream.Close(); 执行以上代码将创建一个personInfo.txt文件它包含了me对象的程序集信息、类名和字段信息。
2、反序列化从文件personInfo.txt中还原一个对象 //反序列化 Stream destream = new FileStream("c:/personInfo.txt", FileMode.Open, FileAccess.Read, FileShare.Read); var stillme = (Person)formatter.Deserialize(destream); stream.Close();
二、SoapFormatter序列化方式 与BinaryFormatter序列化方式类似只需要把IFormatter formatter = new BinaryFormatter()改成 IFormatter formatter = new SoapFormatter(),并且引用程序集System.Runtime.Serialization.Formatters.Soap.dll.net自带的 using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap; namespace SerializableTest { class Program { static void Main(string[] args) { //创建一个格式化程序的实例 IFormatter formatter = new SoapFormatter(); Console.WriteLine("对象序列化开始……"); var me = new Person { Sno = "200719", Name = "yuananyun", Sex="man", Age=22 }; //创建一个文件流 Stream stream = new FileStream("c:/personInfo.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
三、 formatter.Serialize(stream, me); stream.Close(); Console.WriteLine("序列化结束\n"); Console.WriteLine("反序列化开始……"); //反序列化 Stream destream = new FileStream("c:/personInfo.txt", FileMode.Open, FileAccess.Read, FileShare.Read); var stillme = (Person)formatter.Deserialize(destream); stream.Close(); Console.WriteLine("反序列化结束输出对象信息……"); Console.WriteLine(stillme.DisplayInfo()); Console.ReadKey(); } } }
异常处理:
没啥说的:记住几句话:
Try不能单独使用;
Try......catch;
Try.......finally;
Try......catch......finally
Try......catch....catch.........n个catch.....finally;
Finally是最后必须执行的;但不是因为上面执行不了了非得放finally;
接口:
对于借口的定义:interface 关键字:
接口之间可以继承:
例:
Public interface IFather
{
Void speak();//前面没有访问权限字段,没有具体实现方法
}
Public class Son:IFather
{
Public void speak()
{
Console.WriteLine(“hello”);
}
}
对于接口的多态什么玩意的:
就是你继承这个接口,并且实现了接口的方法,但又把这个方法给虚拟了,用于别的子类来继承,我看了我想死的心都有;
对于区分接口方法和对象方法,感觉这个更坑爹;
这个我没办法讲了,感觉好没意思,如果说接口不能被实例化,只能通过继承的类来对它实例化,那干嘛还非要出来个属于接口方法和属于对象的方法;
最后一个多级继承和二义性:
Public interface IA
{
Void speakA();
}
Public interface IB
{
Void speakB();
}
Public class C
{
Public void speadC()
{
Console.WriteLine(“hello C”);
}
}
Class D:IA,IB,C
{
Void IA.speakA()
{
Console.WriteLine(“hello A”);
}
Void IC.speakB()
{
Console.WriteLine(“hello B”);
}
}
二义性:
Public interface IA
{
Void F();
}
Public interface IB
{
Void F();
}
Public class C:IA,IB
{
Public void IA.F()
{
Console.WriteLine(“hello A”);
}
Public void IB.F()
{
Console.WriteLine(“hello B”);
}
Public override void F()
{
Console.WriteLine(“hello C”);
}
}
C c=new C();
c.F();//输出hello C
((IA)c).F();//hello A
((IB)c).F();//hello B
随机推荐
- LWIP互联网资料汇总
本文主要搜集了下互联网上关于LWIP的资料和教程 欢迎补充 第一部分:移植 LWIP在UCOS上移植 LWIP 在STM32上移植 http://www.docin.com/p-459242028 ...
- 【学习干货】给coder的10个读书建议
1.知识更新非常快,大学一毕业就已经有40%的知识过时,一年不读书80%过时,三年不读书99%过时.这就要求我们不间断阅读,每年每月每星期每天都要阅读,只有长期的阅读才能不被淘汰:也只有长期阅读,才能 ...
- 解析XML最快速的方式
采用提JAXB技术 1.根据xml生成xsd 执行:java -jar trang.jar a.xml a.xsd 2.根据java的xjc来生成实现类 执行:xjc a.xsd 注:在执行前最好把数 ...
- 解决配置android开发环境eclipse获取ADT获取不到,一直"Pending"
在安装完Android SDK后eclipse要获取ADT, 可是由于GFW的存在, eclipse经常无法从http://dl-ssl.google.com/android/eclipse 获取到任 ...
- hive 中出现struct 结构化的问题
如果你使用udf,udaf,udtf中的某一个并且查询日志中出现如下之类的struct错误 java.lang.RuntimeException: Error in configuring objec ...
- algorithm@ Divide two integers without using multiplication, division and mod operator. (Bit Operation)
#include<bits/stdc++.h> using namespace std; int divide(int dividend, int divisor) { long long ...
- A Tour of Go Exercise: Errors
Copy your Sqrt function from the earlier exercises and modify it to return an error value. Sqrt shou ...
- keil中 code、data、idata的区别
存储器类型 本C51编译器支持8051及其派生类型的结构能够访问8051的所有存储器空间具有下表列出的存储器类型的变量都可以被分配到某个特定的存储器空间.存储器类型 描述code 程序空间64 Kby ...
- [一]初识Json
JSON 对象{ "name":"张三" , "age":22}JSON 数组{"student": [{ " ...
- webServices
引用项目的配置文件: <system.serviceModel> <bindings> <basicHttpBinding> <!--旅游供应--> & ...