第四章:文件管理緩存
File類:
對於File類,裏面的方法都是靜態方法,就是直接能夠用FIle來「.」;ide
記幾個方法吧:File.Copy(string filename1,string filename2);工具
File.Exists(string filename);spa
File.Move(string filename1,string filename2);.net
File.Delete(string filename);指針
其餘的在課本上看吧,沒見考過;orm
但要注意一點,那個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對象的程序集信息、類名和字段信息。
二、反序列化從文件personInfo.txt中還原一個對象 //反序列化 Stream destream = new FileStream("c:/personInfo.txt", FileMode.Open, FileAccess.Read, FileShare.Read); var stillme = (Person)formatter.Deserialize(destream); stream.Close();
2、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);
3、 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