版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1.1系統(tǒng)技術(shù)棧介紹——文件操作System.IO命名空間File類和FileInfo類Directory類和DirectoryInfo類FileStream類流和文件流StreamReader類和StreamWriter類Path類BufferedStream類序列化與反序列化知識回顧String類高效的StringBuilder類DateTime類Random類學習目標通過本節(jié)學習可以:重點學習File類和FileInfo類重點學習FileStream類重點學習StreamReader類和StreamWriter類掌握Directory類和DirectoryInfo類掌握Path類掌握BufferedStream類掌握序列化與反序列化了解流和文件流了解System.IO命名空間01流和文件流流和文件流在計算機中,無論是文本、圖片、音頻還是視頻,所有的文件都是以二進制(字節(jié))形式存儲的。為此,C#專門針對文件的輸入輸出操作提供了一系列的流,統(tǒng)稱為文件流。文件流是程序中最常用的流,根據(jù)數(shù)據(jù)的傳輸方向可將其分為輸入流和輸出流。為了方便理解,可以把輸入流和輸出流比作兩根“水管”,如下圖所示。集合概述流和文件流上圖中,輸入流被看作是一個輸入管道,輸出流被看作是一個輸出管道,數(shù)據(jù)通過輸入流從源設備輸入到程序中,通過輸出流從程序中輸出到目標設備中,從而實現(xiàn)數(shù)據(jù)的傳輸。由此可見,文件流中的輸入輸出都是相對于程序而言的。流和文件流02System.IO命名空間System.io命名空間在C#中,文件操作類都位于System.IO命名空間中,因此在使用這些類時需要引入System.IO命名空間。該命名空間中包含了很多類,為了方便初學者更好地學習,接下來通過一個圖例來介紹System.IO命名空間中的常用類,如下圖所示。System.IO命名空間System.io命名空間上圖中列舉了一些常用的類,這些類大致可分為操作目錄的類、操作文件的類、操作文件路徑的類等。其中,Directory和DirectoryInfo屬于操作目錄的類,F(xiàn)ileStream、File和FileInfo屬于操作文件的類,StreamReader、StreamWriter類屬于操作文本文件的類,Path類屬于操作文件路徑的類。System.IO命名空間03File類和FileInfo類File類File類是一個靜態(tài)類,它提供了許多靜態(tài)方法,用于處理文件,使用這些方法可以對文件進行創(chuàng)建、移動、查詢和刪除等操作,接下來介紹File類中的一些常用靜態(tài)方法,如下表所示。方法說明FileStreamCreate(stringpath)根據(jù)傳入的路徑創(chuàng)建一個文件,如果文件不存在,則創(chuàng)建文件,如果存在且不是只讀的,則覆蓋其內(nèi)容。voidDelete(stringpath)如果文件存在,則刪除指定的文件,如果指定的文件不存在也不引發(fā)異常。boolExists(stringpath)判斷指定文件是否存在,若存在則返回ture,否則返回false。voidMove(stringsourceFileName,stringdestFileName)將指定的文件移動到新位置,可以在新位置為文件指定不同的名稱。FileStreamOpen(stringpath,FileModemode)打開指定路徑上的文件并返回FileStream對象。voidCopy(stringsourceFileName,stringdestFileName)將現(xiàn)有的文件內(nèi)容復制到新文件中,可以指定是否允許覆蓋同名的文件。File類File類接下來通過一個案例來演示如何調(diào)用這些方法,具體代碼如下所示。namespaceProgram01{classProgram{staticvoidMain(string[]args){File.Create("Data.txt");
Console.WriteLine("文件創(chuàng)建成功");if(File.Exists("Data.txt")){
Console.WriteLine("Data.txt文件存在");}else{Console.WriteLine("Data.txt文件不存在");}Console.ReadKey();}}}File類創(chuàng)建文件判斷文件是否存在File類相對路徑是指當前文件相對于與其他文件(或文件夾)之間的路徑關(guān)系。例如,如果在路徑D:\workspace\a\b\下有程序文件b.cs和文本文件a.txt,那么相對于b.cs文件,a.txt文件與它就是在同一文件目錄下,在b.cs文件中調(diào)用a.txt文件時,直接寫文件名即可。相對路徑使用符號“/”表示,具體使用方式如下:在斜杠前面加一個點“./”表示上一級目錄;在斜杠前面加兩個點“../”表示當前文件的根目錄。絕對路徑是指文件在磁盤上的完整路徑,例如b.cs程序調(diào)用a.txt時填寫D:\workspace\a\b\a.txt,在程序中使用絕對路徑時需要注意該路徑的位置,當該位置發(fā)生改變時可能會導致異常。多學一招FileInfo類FileInfo類與File類比較類似,它們都可以對磁盤上的文件進行操作。不同的是FileInfo類是實例類,所有的方法都只能在實例化對象后才能調(diào)用。創(chuàng)建FileInfo類的對象時必須傳遞一個文件路徑作為參數(shù),具體代碼如下:FileInfoaFile=newFileInfo(@"C:\Data.txt");上述代碼表示使用FileInfo類創(chuàng)建一個對象,將文件路徑作為參數(shù),而路徑中@符號表示不解析轉(zhuǎn)義字符,如果沒有@前綴就需要用“\\”替代“\”。通過前面的學習可知,“\”是一個轉(zhuǎn)義字符,在程序中要表示一個“\”就需要使用“\\”。例如下面這行代碼:FileInfoaFile=newFileInfo("C:\\Data.txt");FileInfo類FileInfo類FileInfo類中除了有許多與File類相似的方法外,同時也有它特有的屬性,如下表所示。屬性說明Directory該屬性用于檢索一個DirectoryInfo對象,表示當前文件所在的目錄。DirectoryName該屬性用于返回文件目錄,而且這個屬性是只讀的。IsReadOnly該屬性用于判斷文件是否是只讀的。Length該屬性用于獲取文件的大?。ㄒ宰止?jié)為單位),并返回long值。FileInfo類Fileinfo類接下來通過一個案例來學習FileInfo類中的方法與其特有屬性的使用,具體代碼如下所示。staticvoidMain(string[]args){FileInfoaFile=newFileInfo("Data.txt");aFile.Create();
Console.WriteLine("文件創(chuàng)建成功");if(aFile.Exists){
Console.WriteLine("Data.txt文件存在");}else{Console.WriteLine("Data.txt文件不存在");}Console.WriteLine("文件當前目錄為:"+aFile.Directory);Console.WriteLine("文件大小為:"+aFile.Length);Console.ReadKey();}FileInfo類實例化FileInfo類創(chuàng)建文件判斷文件是否存在思考題簡述File類和FileInfo類的異同。04Directory類和DirectoryInfo類Directory類Directory類是一個靜態(tài)類,不可實例化,并且提供了許多靜態(tài)方法用于對文件的存放目錄進行操作,例如創(chuàng)建、刪除、查詢和移動目錄等。Directory類操作文件目錄的常用方法如下表所示。屬性說明DirectoryInfoCreateDirectory(stringpath)創(chuàng)建指定路徑的所有目錄和子目錄voidDelete(stringpath)刪除指定路徑的空目錄boolExists(stringpath)判斷指定路徑目錄是否存在,若存在,則返回ture,否則,返回false。DirectoryInfoGetParent()查找指定路徑的父目錄,包括相對路徑和絕對路徑voidMove(stringsourceDirName,stringdestDirName)將文件或目錄及其內(nèi)容移動到新位置。Directory類Directory類接下來通過一個簡單的案例來學習這些方法的使用,具體代碼如下所示。staticvoidMain(string[]args){
Directory.CreateDirectory(@"D:\workspace\Chapter09\Program");
if(Directory.Exists(@"D:\workspace\Chapter09\Program")){Console.WriteLine("文件存在");}else{Console.WriteLine("文件不存在");}Directory.Delete(@"D:\workspace\Chapter09\Program");Console.WriteLine("刪除成功");Console.ReadKey();}Directory類創(chuàng)建多級目錄判斷目錄是否存在刪除沒有內(nèi)容的目錄Directoryinfo類DirectoryInfo是一個非靜態(tài)類,可以進行實例化。該類的功能與Directory類相似,也可以對文件的目錄進行創(chuàng)建、刪除、查詢、移動等操作。實現(xiàn)對目錄操作的常見方法與屬性如下表所示。屬性或方法說明Parent屬性,獲取指定子目錄的父目錄Root屬性,獲取路徑的根目錄Name屬性,獲取當前DirectoryInfo對象的名稱Exists屬性,判斷指定目錄是否存在Create()方法,創(chuàng)建目錄GetDirectories(stringpath)方法,獲取當前目錄的子目錄CreateSubdirectory(stringpath)方法,在指定路徑中創(chuàng)建一個或多個子目錄GetFiles()方法,獲取當前目錄的文件列表Delete()方法,刪除指定的目錄及其內(nèi)容GetFileSystemInfos()方法,獲取當前目錄的子目錄和文件列表MoveTo(stringdestDirName)方法,將指定目錄及其內(nèi)容移到新位置DirectoryInfo類Directoryinfo類接下來通過一個案例來演示一下這些屬性與方法的使用,具體代碼如下所示。staticvoidMain(string[]args){stringpath=@"D:\workspace\Chapter09\Program04\bin\Debug\Test";DirectoryInfodi=newDirectoryInfo(path);di.Create();Console.WriteLine("當前目錄名稱為:"+di.Name);Console.WriteLine("父目錄名為:"+di.Parent);Console.WriteLine("根目錄為:"+di.Root);stringpath1=@"D:\workspace\Chapter09\Program04\bin\Debug";DirectoryInfodi1=newDirectoryInfo(path1);DirectoryInfo類創(chuàng)建一個DirectoryInfo對象創(chuàng)建目錄Directoryinfo類運行結(jié)果如右圖所示:DirectoryInfo類//遍歷目錄下的所有文件,并找出包含P字符的文件名FileInfo[]files1=di1.GetFiles("*P*");foreach(variteminfiles1){Console.WriteLine("包含P字符的文件名稱為:"+item.Name);}Console.ReadKey();}獲取當前目錄包含P字符的文件列表思考題簡述Directory類和DirectoryInfo類的異同。05Filestream類Filestream類簡介FileStream類表示在磁盤或網(wǎng)絡路徑上指向文件的流,并提供了在文件中讀寫字節(jié)和字節(jié)數(shù)組的方法,通過這些方法FileStream對象可以讀取諸如圖像、聲音、視頻、文本文件等,也就是說FileStream能夠處理各種數(shù)據(jù)文件。FileStream類有很多重載的構(gòu)造方法,其中最常用的是帶有三個參數(shù)的構(gòu)造方法,具體如下:FileStream(stringpath,FileModemode,FileAccessaccess);FileStream類簡介Filestream類簡介FileStream類還有一些常用的方法,如下表所示。方法說明intReadByte()從文件中讀取一個字節(jié),并將讀取位置提升一個字節(jié)。voidFlush()清除此流的緩沖區(qū),使得所有緩沖的數(shù)據(jù)都寫入到文件中。voidWriteByte(bytevalue)將一個字節(jié)寫入文件流的當前位置。voidWrite(byte[]array,intoffset,intcount)從緩沖區(qū)讀取數(shù)據(jù)將字節(jié)塊寫入該流。intRead(byte[]array,intoffset,intcount)從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定緩沖區(qū)中。longSeek(longoffset,SeekOriginorigin)將該流的當前位置設置為給定值。FileStream類簡介Filestream類讀取文件FileStream類除了可以以字節(jié)的方式讀取文件外,還可以對文件任意位置進行讀取,在FileStream類的內(nèi)部有一個文件指針用于維護文件的位置,該指針指向文件進行下一次讀寫操作的位置。大多數(shù)情況下,當打開文件時,指針就指向文件的開始位置,如果想修改指針的位置可以使用FileStream對象的Seek()方法,示例代碼如下:FileStreamaFile=File.OpenRead("Data.txt");aFile.Seek(8,SeekOrigin.Current);FileStream類讀取文件Filestream類讀取文件為了讓學生更好的學習FileStream類,接下來通過一個案例來演示FileStream類對文件的訪問操作,具體代碼如下所示。staticvoidMain(string[]args){byte[]byteData=newbyte[1024];char[]charData=newchar[1024];using(FileStreamaFile=newFileStream("Data.txt",FileMode.Open)){aFile.Seek(0,SeekOrigin.Begin);aFile.Read(byteData,0,1024);}Decoderd=Encoding.Default.GetDecoder();d.GetChars(byteData,0,byteData.Length,charData,0);Console.WriteLine(charData);//輸出解碼后的字符串
Console.ReadKey();}}FileStream類讀取文件設置當前流的位置從流中讀取字節(jié)塊到byteData數(shù)組中將字節(jié)數(shù)組和內(nèi)部緩沖區(qū)中的字節(jié)解碼為字符數(shù)組Filestream類寫入文件接下來通過一個案例來演示FileStream類向文件寫入數(shù)據(jù),具體代碼如下所示。classProgram{staticvoidMain(string[]args){byte[]byteData;//定義一個字節(jié)數(shù)組
char[]charData;//定義一個字符數(shù)組
try{//創(chuàng)建FileStream流對象,并使用using關(guān)鍵字包含執(zhí)行代碼
using(FileStreamaFile=newFileStream("Data.txt",FileMode.Create)){//寫一段字符串并使用ToCharArray()方法轉(zhuǎn)換為字符存儲到字符數(shù)組中
charData="HelloworldbyC#".ToCharArray();byteData=newbyte[charData.Length];......}}catch(IOExceptionex){//處理相關(guān)異常
......}......FileStream類寫入文件Filestream類寫入文件classProgram{staticvoidMain(string[]args){......
try{using(FileStreamaFile=newFileStream("Data.txt",FileMode.Create)){......Encodere=Encoding.Default.GetEncoder();//使用Encoder類將字符數(shù)組轉(zhuǎn)換為字節(jié)數(shù)組e.GetBytes(charData,0,charData.Length,byteData,0,true);aFile.Seek(0,SeekOrigin.Begin);//文件指針指向文件開始位置aFile.Write(byteData,0,byteData.Length);//開始將字節(jié)數(shù)組中的數(shù)據(jù)寫入文件}}catch(IOExceptionex){//處理相關(guān)異常
Console.WriteLine("文件操作異常");Console.WriteLine(ex.ToString());Console.ReadKey();return;}Console.ReadKey();}}FileStream類寫入文件實例:復制文件接下來將調(diào)用FileStream類的Read()和Write()方法來實現(xiàn)復制一個文件的操作,具體代碼如下所示。staticvoidMain(string[]args){stringsource="a.txt";stringtarget="b.txt";
using(FileStreamfsRead=newFileStream(source,FileMode.Open)){using(FileStreamfsWrite=newFileStream(target,FileMode.Create)){byte[]bytes=newbyte[1024];//創(chuàng)建緩沖區(qū)
//循環(huán)讀取文件流
while(true){intr=fsRead.Read(bytes,0,bytes.Length);if(r<=0){break;}fsWrite.Write(bytes,0,bytes.Length);//寫入文件
......}實例:復制文件實例:復制文件程序運行成功后,在該項目的根目錄中打開a.txt文件和b.txt文件進行對比結(jié)果如下圖所示。由運行結(jié)果可知,a.txt文件內(nèi)容與b.txt文件內(nèi)容一致,因此說明文件復制成功了。實例:復制文件思考題簡述使用FileStream類進行文件的讀寫操作。06StreamReader類和StreamWriter類StreamWriter類StreamWriter類用于將字符和字符串寫入到文件中,它實際上是先轉(zhuǎn)換為FileStream對象,然后向文件中寫入數(shù)據(jù),所以在創(chuàng)建對象時可以通過FileStream類的對象來創(chuàng)建StreamWriter類的對象,同時也可以直接創(chuàng)建StreamWriter類對象。當FileStream類的對象存在時,可以通過該對象來創(chuàng)建StreamWriter類的對象,具體代碼如下:FileStreamaFile=newFileStream("Data.txt",FileMode.CreateNew);StreamWritersw=newStreamWriter(aFile);StreamWriter類StreamWriter類除了前面的方式以外,還可以通過指定文件來創(chuàng)建StreamWriter類的對象,具體代碼如下:StreamWritersw=newStreamWriter("Data.txt");上述代碼表示創(chuàng)建一個StreamWriter流對象,并向Data.txt文件中寫入數(shù)據(jù)。如果Data.txt文件不存在,則創(chuàng)建該文件。接下來通過一個案例來學習StreamWriter類的使用方法,具體代碼如下所示。StreamWriter類StreamWriter類staticvoidMain(string[]args){try{//創(chuàng)建文件流對象,如果文件不存在則創(chuàng)建Data.txt文件
StreamWritersw=newStreamWriter("Data.txt");
sw.WriteLine(“深圳市信息職業(yè)技術(shù)學院");sw.Close();//關(guān)閉當前流對象
Console.ReadKey();}catch(IOExceptionex){Console.WriteLine("文件操作異常");Console.WriteLine(ex.ToString());return;}}StreamWriter類向文件中寫入一段文字StreamWriter類運行結(jié)果如下圖所示。由上圖中的運行結(jié)果可知,文件Data.txt中成功寫入了一段文字。StreamWriter類StreamWriter類接下來通過一個案例來學習如何使用StreamWriter類的對象對文件進行追加內(nèi)容的操作,具體代碼如下所示。try{//對Program09項目中的Data.txt進行追加操作
stringpath=@"D:\workspace\Chapter09\Program09\bin\Debug\Data.txt";StreamWritersw=newStreamWriter(path,true);sw.WriteLine("網(wǎng)址:");
sw.Close();//關(guān)閉當前流對象Console.ReadKey();}catch(IOExceptionex){Console.WriteLine("文件操作異常");Console.WriteLine(ex.ToString());return;}StreamWriter類向文件中追加一段文字StreamWriter類程序執(zhí)行成功之后,打開Program09項目根目錄下的Data.txt文件,該文件中的最初內(nèi)容與追加內(nèi)容后的對比如下圖所示。由上圖中的運行結(jié)果可知,文件Data.txt中的內(nèi)容已經(jīng)追加了“網(wǎng)址:”。StreamWriter類Streamreader類當FileStream類的對象存在時,可以通過該對象來創(chuàng)建StreamReader類的對象,具體代碼如下:FileStreamaFile=newFileStream("Data.txt",FileMode.Open);StreamReadersr=newStreamReader(aFile);StreamReader類與StreamWriter類一樣,可以通過具體文件路徑的字符串來創(chuàng)建StreamReader類的對象,具體代碼如下:StreamReadersr=newStreamReader("Data.txt");StreamReader類Streamreader類接下來通過一個案例來演示StreamReader類的用法,將Program09項目的根目錄下的Data.txt文件拷貝到該程序的根目錄下,具體代碼如下所示。stringline;stringpath=@"D:\workspace\Chapter09\Program10\bin\Debug\Data.txt";try{
FileStreamaFile=newFileStream(path,FileMode.Open);StreamReadersr=newStreamReader(aFile);
line=sr.ReadLine();
while(line!=null){
Console.WriteLine(line);line=sr.ReadLine();}sr.Close();
}......StreamReader類打開路徑為path的文件創(chuàng)建讀取流對象讀取文件中的第一行如果文件不為空,則繼續(xù)讀取文件并輸出至控制臺當文件讀取完畢后,關(guān)閉當前流對象Streamreader類運行結(jié)果如下圖所示。需要注意的是,程序在運行過程中可能會出現(xiàn)異常,因此使用try…catch語句來捕獲異常,并將異常的類型設置為IOException,說明捕獲的是文件操作中的異常。StreamReader類實例:讀寫文件接下來通過一個文件讀寫的案例來學習StreamReader類和StreamWriter類的使用,具體代碼如下所示。StreamWritersw=newStreamWriter("Data.txt",true,Encoding.Default);sw.WriteLine("工業(yè)管理軟件系統(tǒng)--SMOM");sw.Close();//關(guān)閉StreamWriter文件流
StreamReadersr=newStreamReader("Data.txt",Encoding.Default);//逐行讀取數(shù)據(jù),如果未讀取到數(shù)據(jù)則返回nullwhile((temp=sr.ReadLine())!=null){Console.WriteLine(temp);}sr.Close();//關(guān)閉StreamReader文件流
sr.Dispose();//釋放StreamReader對象
sw.Dispose();//釋放StreamWriter對象
Console.ReadKey();實例:讀寫文件實例:讀寫文件運行結(jié)果如下圖所示。由上圖中的運行結(jié)果可知,Data.txt文件已讀寫成功并將文件中的信息輸出到控制臺。實例:讀寫文件思考題如何使用StreamReader類和StreamWriter類讀取和寫入文件?07Path類PATH類C#中提供了Path類(靜態(tài)類)。Path類中包含了一系列用于對文件路徑進行操作的方法,具體如下表所示。方法說明stringCombine(paramsstring[]paths)將字符串或字符串數(shù)組組合成一個路徑stringGetDirectoryName(stringpath)返回指定路徑字符串的目錄信息stringGetExtension(stringpath)返回指定路徑字符串的擴展名stringGetFileName(stringpath)返回指定路徑字符串的文件名和擴展名stringGetFullPath(stringpath)返回指定路徑字符串的絕對路徑boolHasExtension(stringpath)確定路徑是否包括文件擴展名stringGetPathRoot(stringpath)獲取指定路徑的根目錄信息stringGetTempPath()返回當前用戶的臨時文件夾的路徑stringGetTempFileName()創(chuàng)建磁盤上唯一命名的零字節(jié)的臨時文件并返回該文件的完整路徑stringChangeExtension(stringpath,stringextension)更改路徑字符串的擴展名Path類PATH類接下來通過具體案例來演示Path類中常用方法的使用,具體代碼如下所示。stringpath=@"D:\workspace\Chapter09\Program12\Data.txt";//修改文件的擴展名
stringstr=Path.ChangeExtension(path,"exe");Console.WriteLine("修改文件擴展名后:"+str);stringpath1=Path.Combine(@"E:\4.辦公\9.項目\20.教育板塊\5.深信息校企合作\工業(yè)管理軟件系統(tǒng)開發(fā)課件\C#基礎demo\Chapter09\Program10\bin\Debug\",@"\Data.txt");Console.WriteLine("拼接后的路徑:"+path1);
stringpath2=Path.GetDirectoryName(path);Console.WriteLine("返回的目錄信息為:"+path2);Path類拼接路徑獲取文件或文件夾的路徑Path類//獲取擴展名
stringext=Path.GetExtension(path);Console.WriteLine("獲取擴展名為:"+ext);//獲取文件名
Console.WriteLine("包含擴展名:"+Path.GetFileName(path));Console.WriteLine("不包含擴展名:"+Path.GetFileNameWithoutExtension(path));//由相對路徑獲取絕對路徑
stringstr1=Path.GetFullPath("Data.txt");Console.WriteLine("全路徑名字:"+str1);Console.ReadLine();Path類Path類運行結(jié)果如下圖所示。Path類08BufferedStream類Bufferedstream類BufferedStream提供了幾個常用的操作方法,Read()方法、Write()方法和Flush()方法,具體分析如下:1. Read()方法Read()方法用于讀取緩沖區(qū)中的數(shù)據(jù),具體語法格式如下:2. Write()方法Write()方法用于將字節(jié)復制到緩沖流,并在緩沖流內(nèi)的當前位置繼續(xù)寫入字節(jié),具體語法格式如下:publicoverrideintRead(byte[]array,intoffset,intcount);publicoverrideintWrite(byte[]array,intoffset,intcount);BufferedStream類BufferedStream類3.Flush()方法Flush()方法用于清除當前流中的所有緩沖區(qū),使得所有緩沖的數(shù)據(jù)都被寫入到存儲設備中,具體語法格式如下:
publicoverridevoidFlush()接下來通過一個案例來演示將一個文件中的內(nèi)容寫入到另一個文件中。首先在解決方案Chapter09中創(chuàng)建一個項目名為Program13的控制臺應用程序,然后在該項目的根目錄下分別創(chuàng)建一個Data1.txt文件與Data2.txt文件,在Data1.txt文件中輸入“工業(yè)管理軟件系統(tǒng)--SMOM”,具體代碼如下所示。BufferedStream類BufferedStream類staticvoidMain(string[]args){inti;FileStreammyStream1,myStream2;BufferedStreammyBStream1,myBStream2;byte[]myByte=newbyte[1024];//定義字節(jié)數(shù)組
Console.WriteLine("讀寫前");Print("Data2.txt");myStream1=File.OpenRead("Data1.txt");
myStream2=File.OpenWrite("Data2.txt");myBStream1=newBufferedStream(myStream1);//實例化緩沖流對象
myBStream2=newBufferedStream(myStream2);//開始讀取myBStream1流對象中的內(nèi)容,返回讀取的字節(jié)數(shù)
i=myBStream1.Read(myByte,0,1024);while(i>0){myBStream2.Write(myByte,0,i);
i=myStream1.Read(myByte,0,1024);}......BufferedStream類以讀的方式打開Data1.txt以寫的方式打開Data2.txt開始讀取myBStream1流對象中的內(nèi)容,返回讀取的字節(jié)數(shù)向myBStream2流對象中寫入內(nèi)容BufferedStream類staticvoidMain(string[]args){......myBStream2.Flush();
myStream1.Close();myStream2.Close();
Console.WriteLine("讀寫后");Print("Data2.txt");Console.ReadKey();}//輸出文件內(nèi)容的方法
publicstaticvoidPrint(stringpath){using(StreamReadersr=newStreamReader(path,Encoding.Default)){stringcontent=sr.ReadToEnd();Console.WriteLine("文件{0}內(nèi)容為:{1}",path,content);}......BufferedStream類清空當前流的緩沖空間關(guān)閉當前流對象BufferedStream類運行結(jié)果如下圖所示。注意:由于緩沖流在內(nèi)存的緩沖區(qū)中直接讀取數(shù)據(jù),而不是從磁盤中直接讀取數(shù)據(jù),所以它處理大容量的文件尤為合適。BufferedStream類思考題BufferedStream提供的常用方法包括哪些?09序列化和反序列化序列化和反序列化在程序開發(fā)中有時需要傳輸和保存對象,但對象是無法直接進行數(shù)據(jù)傳輸和保存的,所以C#中提供了序列化和反序列化。序列化是指將對象狀態(tài)轉(zhuǎn)換為可傳輸或可保存的過程,此時必須使用Serializable標簽標記該對象。反序列化是指將存儲的流轉(zhuǎn)換為對象的過程。接下來通過一個案例來演示對象序列化和反序列化的過程,具體代碼如所示。序列化和反序列化序列化和反序列化staticvoidMain(string[]args){Personp=newPerson();//構(gòu)造一個用于序列化操作的對象
p.Name=“廣東賽意信息科技股份有限公司";p.Age=6;//構(gòu)造序列化器對象
BinaryFormatterbf=newBinaryFormatter();//構(gòu)造輸出流
using(FileStreamfs=newFileStream("Data.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite)){
bf.Serialize(fs,p);Console.WriteLine("序列化操作成功,對象已寫入文件");}......}序列化和反序列化進行序列化輸出操作序列化和反序列化staticvoidMain(string[]args){......using(FileStreamfs1=newFileStream("Data.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite)){//進行反序列化,返回一個object類型的對象objectobj=bf.Deserialize(fs1);Console.WriteLine("反序列化對象數(shù)據(jù)為"+obj);}Console.ReadKey();}......序列化和反序列化將fs1反序列化為對象序列化和反序列化[Serializable]publicclassPerson{publicintAge{get;set;}publicstringName{get;set;}publicoverridestringToString(){returnstring.Format("Name:{0},Age:{1}",this.Name,this.Age);}}序列化和反序列化使用Serializable標簽標記Person類序列化和反序列化運行結(jié)果如下圖所示。序列化和反序列化練習?本章練習如何使用FileStream類讀取文件?如何使用StreamWriter類與StreamReader類讀寫文件??預習練習如何創(chuàng)建SQLServer數(shù)據(jù)庫?如何創(chuàng)建SQLServer數(shù)據(jù)庫表?本章小節(jié)本章主要講解了文件操作相關(guān)的知識,包括:首先對流與文件流進行了簡單的介紹;然后講解了File類、FileStream類、BufferedStream類、StreamReader和StreamWriter類的作用與使用;最后講解了對象的序列化與反序列化操作。希望讀者能夠認真學習本章內(nèi)容,熟練掌握文件的相關(guān)操作。——使用ADO.NET操作系統(tǒng)1.1系統(tǒng)技術(shù)棧介紹ADO.NET常用類下載并安裝SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫使用ADO.NET訪問數(shù)據(jù)庫認識數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)表知識回顧流和文件流System.IO命名空間File類和FileInfo類Directory類和DirectoryInfo類FileStream類StreamReader類和StreamWriter類Path類BufferedStream類序列化與反序列類學習目標通過本節(jié)學習可以:重點學習創(chuàng)建SQLServer數(shù)據(jù)庫重點學習創(chuàng)建SQLServer數(shù)據(jù)表重點學習使用ADO.NET訪問數(shù)據(jù)庫掌握ADO.NET常用類掌握下載并安裝SQLServer數(shù)據(jù)庫了解認識數(shù)據(jù)庫01認識數(shù)據(jù)庫認識數(shù)據(jù)庫數(shù)據(jù)庫(Database,DB)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫,其本身可看作電子化的文件柜,用戶可以對文件中的數(shù)據(jù)進行增加、刪除、修改、查找等操作。數(shù)據(jù)庫的基本特點有以下幾個:1.
數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)庫系統(tǒng)實現(xiàn)了整體數(shù)據(jù)的結(jié)構(gòu)化,這是數(shù)據(jù)庫的最主要特征之一。這里所說的“整體”結(jié)構(gòu)化,是指在數(shù)據(jù)庫中的數(shù)據(jù)不只是針對某個應用,而是面向全組織,面向整體的。2.實現(xiàn)數(shù)據(jù)共享因為數(shù)據(jù)是面向整體的,所以數(shù)據(jù)可以被多個用戶、多個應用程序共享使用,可以大幅度地減少數(shù)據(jù)冗余,節(jié)約存儲空間,避免數(shù)據(jù)之間的不相容性與不一致性。認識數(shù)據(jù)庫認識數(shù)據(jù)庫3.
數(shù)據(jù)獨立性高數(shù)據(jù)的獨立性包含邏輯獨立性和物理獨立性,其中,邏輯獨立性是指數(shù)據(jù)庫中數(shù)據(jù)的邏輯結(jié)構(gòu)和應用程序相互獨立,物理獨立性是指數(shù)據(jù)物理結(jié)構(gòu)的變化不影響數(shù)據(jù)的邏輯結(jié)構(gòu)。4.數(shù)據(jù)統(tǒng)一管理與控制數(shù)據(jù)的統(tǒng)一控制包含安全控制、完整控制和并發(fā)控制。簡單來說就是防止數(shù)據(jù)丟失、確保數(shù)據(jù)的正確有效,并且在同一時間內(nèi),允許用戶對數(shù)據(jù)進行多路存取,防止用戶之間的異常交互。認識數(shù)據(jù)庫02ADO.NET常用類ADO.NET常用類ADO.NET的名稱起源于ADO(ActiveXDataObjects),ADO是一個COM組件庫,也就是一個通用框架類庫。該類庫是在.NET編程環(huán)境中使用的數(shù)據(jù)訪問接口,而ADO.NET是與C#、.NETFramework一起使用的類集名稱。ADO.NET有兩部分組成,分別是數(shù)據(jù)提供程序(Provider)與數(shù)據(jù)集(DataSet),具體介紹如下:數(shù)據(jù)提供程序(Provider):能與數(shù)據(jù)庫保持連接,并且可以執(zhí)行SQL命令,還可以操縱數(shù)據(jù)集。數(shù)據(jù)集(DataSet):能在與數(shù)據(jù)庫斷開連接的情況下,對數(shù)據(jù)庫中的數(shù)據(jù)進行操作。ADO.NET常用類ADO.NET常用類在使用ADO.NET對數(shù)據(jù)庫進行操作時,通常會用到5個類,分別是Connection類、Command類、DataReader類、DataAdapter類以及DataSet類。接下來對這5個類進行簡單的介紹。1.
Connection類Connection類主要用于建立與斷開數(shù)據(jù)庫的連接,通過該類可以獲取當前數(shù)據(jù)連接的狀態(tài)。在.NET平臺下,由于SQLServer數(shù)據(jù)庫提供了一些額外的操作菜單便于對數(shù)據(jù)庫進行操作,因此推薦使用SQLServer數(shù)據(jù)庫,在工業(yè)管理軟件中使用Oracle數(shù)據(jù)庫也比較多。2.Command類Command類主要用于對數(shù)據(jù)庫中的數(shù)據(jù)進行增、刪、改、查的操作,該類的對象可以用于執(zhí)行返回數(shù)據(jù)、修改數(shù)據(jù)、運行存儲過程、發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令,根據(jù)在Command類的對象中傳遞的SQL語句的不同,可以調(diào)用相應的方法來執(zhí)行對應的SQL語句。ADO.NET常用類ADO.NET常用類3.
DataReader類DataReader類用于讀取從數(shù)據(jù)庫中查詢到的數(shù)據(jù),在讀取數(shù)據(jù)時,只能向前讀不能向后讀,同時也不能修改該類對象中的數(shù)據(jù)。當與數(shù)據(jù)庫的連接斷開時,該類對象中的數(shù)據(jù)會被清除。4.DataAdapter類DataAdapter類可以看作是數(shù)據(jù)庫與DataSet類之間的一個橋梁,主要使用Command類的對象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet數(shù)據(jù)集中,并確保DataSet數(shù)據(jù)集中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。5.DataSet類DataSet類與DataReader類相似,都用于讀取從數(shù)據(jù)庫中查詢到的數(shù)據(jù),不同的是DataSet類中的數(shù)據(jù)不僅可以多次重復讀取,還可以修改DataSet類中讀取到的數(shù)據(jù)。ADO.NET常用類03下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫在使用數(shù)據(jù)庫之前,我們首先需要下載并安裝創(chuàng)建數(shù)據(jù)庫的工具SQLServer,這里以SQLServer2019工具為例進行介紹,具體步驟如下:1.下載SQLServer2019
或下載地址:/fwlink/?LinkID=8666622.下載完成之后,找到下載的文件夾中名為“SQLServer2019-SSEI-Dev.exe”的文件,鼠標雙擊文件或鼠標右鍵以管理員身份運行。(安裝之前最好先重啟電腦)下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫3.選擇“自定義”安裝。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫4.選擇語言和安裝位置:我選擇的是D盤D:\ProgramFiles\SQLServer,你可以根據(jù)自己電腦選擇合適的安裝位置。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫5.然后點擊“安裝”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫6.正在下載過程中。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫7.下載成功之后會出現(xiàn)如下界面。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫8.選擇“安裝”,選擇“全新的SQLServer獨立安裝或向現(xiàn)有安裝添加功能”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫9.選擇可用的版本Developer,點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫10.許可條款勾選“我同意”,點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫11.更新選擇。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫12.安裝下載中。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫13.執(zhí)行完畢后,點擊下一步。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫14.點擊全選,然后再把機器學習服務(數(shù)據(jù)庫)中的“R”和“Python”以及“Java”不勾選,點擊下一步。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫15.然后選擇默認實例,點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫16.點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫17.點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫18.選擇“混合模式”、設置賬戶密碼和選擇當前用戶,點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫19.然后選擇“表格模式”,還是要點擊“添加當前用戶”,點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫20.選擇端口號可以自定義(推薦默認不要修改),點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫21.點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫22.點擊“添加當前用戶”,點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫23.點擊“下一步”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫24.點擊“接受”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫25.點擊“安裝”。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫26.安裝過程中。下載并安裝SQLServer數(shù)據(jù)庫下載并安裝SQLSERVER數(shù)據(jù)庫27.安裝完成。下載并安裝SQLServer數(shù)據(jù)庫04創(chuàng)建SQLServer數(shù)據(jù)庫思考題如何創(chuàng)建SQLServer數(shù)據(jù)庫?創(chuàng)建SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫有兩種方式,具體介紹如下:方式1:傳統(tǒng)手動創(chuàng)建SQLServer數(shù)據(jù)庫(1)啟動SQLServer,成功連接服務器后,選中服務器中的數(shù)據(jù)庫,右擊選擇“新建數(shù)據(jù)庫(N)...”選項,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫(2)單擊“新建數(shù)據(jù)庫(N)...”選項,會彈出新建數(shù)據(jù)庫窗口,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫(3)在新建數(shù)據(jù)庫窗口中,輸入數(shù)據(jù)庫的名稱School,接著可以在數(shù)據(jù)庫文件(F)下方的表中設置新建數(shù)據(jù)庫與數(shù)據(jù)庫日志的存放路徑。然后單擊【確定】按鈕,就在服務器中創(chuàng)建完成了一個School數(shù)據(jù)庫,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫方式2:使用SQL語句創(chuàng)建SQLServer數(shù)據(jù)庫(1)在MicrosoftSQLServerManagementStudio(管理員)窗口中,單擊【新建查詢(N)】按鈕,在窗口中的右下角會彈出一個空白的頁面,供編寫SQL語句使用,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫(2)在窗口中編寫SQL語句創(chuàng)建School數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫的SQL語句如下:USEmasterIF(EXISTS(SELECT*FROMsysdatabasesWHEREname='School'))DROPDATABASESchoolGOCREATEDATABASESchoolONPRIMARY(NAME=School,--主數(shù)據(jù)文件邏輯名稱FILENAME='D:\school\School.mdf',--數(shù)據(jù)文件路徑及物理名稱(D:\school路徑需存在)SIZE=5MB,--初始大小
MAXSIZE=UNLIMITED,--最大尺寸
FILEGROWTH=1MB--自動增長的增量)創(chuàng)建SQLServer數(shù)據(jù)庫檢查數(shù)據(jù)庫School是否存在如果已經(jīng)存在School數(shù)據(jù)庫,則刪除School創(chuàng)建School數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫LOGON(NAME=School_log,--日志文件邏輯名稱--日志文件路徑及物理名稱(D:\school路徑需存在)FILENAME=‘D:\school\School_log.ldf',SIZE=2MB,--初始大小MAXSIZE=4MB,--最大尺寸FILEGROWTH=10%--自動增長的增量)創(chuàng)建SQLServer數(shù)據(jù)庫數(shù)據(jù)庫對應的日志文件創(chuàng)建SQLServer數(shù)據(jù)庫(3)編寫完SQL語句之后,單擊窗口中的對號按鈕(分析),對SQL語句進行語法分析,確保SQL語句語法正確,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)庫創(chuàng)建SQLServer數(shù)據(jù)庫(4)單擊窗口中的執(zhí)行按鈕,執(zhí)行編寫的SQL語句,創(chuàng)建數(shù)據(jù)庫School,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)庫05創(chuàng)建SQLServer數(shù)據(jù)表思考題如何創(chuàng)建SQLServer數(shù)據(jù)庫表?創(chuàng)建SQLserver數(shù)據(jù)表創(chuàng)建SQLServer數(shù)據(jù)庫有兩種方式,具體介紹如下:方式1:傳統(tǒng)手動創(chuàng)建SQLServer數(shù)據(jù)庫(1)選中School數(shù)據(jù)庫中的表文件夾,右擊選擇“新建表(N)…”選項,如右圖所示。創(chuàng)建SQLServer數(shù)據(jù)表創(chuàng)建SQLserver數(shù)據(jù)表(2)單擊“新建表(N)...”選項,會在MicrosoftSQLServerManagementStudio窗口右側(cè)彈出需要設置的數(shù)據(jù)庫表中的列名、數(shù)據(jù)類型以及是否允許Null值。如右圖所示。創(chuàng)建SQLServer數(shù)據(jù)表創(chuàng)建SQLserver數(shù)據(jù)表(3)接著按下Ctrl+S鍵,會彈出一個選擇名稱的對話框,在該對話框中輸入表的名稱為Student,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)表創(chuàng)建SQLserver數(shù)據(jù)表(4)單擊【確定】按鈕,會在School數(shù)據(jù)庫中創(chuàng)建一個Student數(shù)據(jù)庫表(刷新數(shù)據(jù)庫表才能看到該表),如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)表創(chuàng)建SQLserver數(shù)據(jù)表方式2:使用SQL語句創(chuàng)建數(shù)據(jù)庫表(1)在MicrosoftSQLServerManagementStudio(管理員)窗口中,單擊【新建查詢(N)】按鈕,在窗口中的右下角會彈出一個空白的頁面,用于編寫SQL語句,如下圖所示。創(chuàng)建SQLServer數(shù)據(jù)表創(chuàng)建SQLserver數(shù)據(jù)表(2)在窗口中編寫SQL語句創(chuàng)建表Student,創(chuàng)建表的SQL語句如下:useSchoolgoifexists(select*fromsysobjectswherename='Student')beginselect'該表已存在'droptableStudent--刪除表end創(chuàng)建SQLServer數(shù)據(jù)表表示在名為School的數(shù)據(jù)庫中創(chuàng)建表判斷是否存在表Student如果Student表存在,則刪除Student表創(chuàng)建SQLserver數(shù)據(jù)表elsebegincreatetableStudent(--設置為主鍵和自增長列,起始值為1,每次自增1Idintnotnullidentity(1,1)primarykey,Namenvarchar(25)null,Ageintnull,Sexnchar(10)null,)end創(chuàng)建SQLServer數(shù)據(jù)表創(chuàng)建表,表字段包括Id、Name、Age和Sex;1、設置Id為主鍵,int類型,不可為空,自增(起始值為1,每次自增1);2、Name為nvarchar類型,可空,長度25;3、Age為int類型,可空;4、Sex為nchar類型,可空,長度10。創(chuàng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國網(wǎng)絡租車平臺行業(yè)全景評估及投資規(guī)劃建議報告
- 四年級數(shù)學(簡便運算)計算題專項練習與答案
- 屋面瓦瓦合同范本
- 2025年中國阿苯達唑片行業(yè)市場供需格局及投資規(guī)劃建議報告
- 2025年洗杯碟機行業(yè)深度研究分析報告
- 2025年中國電動平衡車行業(yè)投資研究分析及發(fā)展前景預測報告
- 2023-2028年中國小磨香油行業(yè)市場深度研究及投資戰(zhàn)略規(guī)劃報告
- 2025年粉料罐項目可行性研究報告
- 2025年中國醫(yī)療防輻射用品行業(yè)市場全景監(jiān)測及投資戰(zhàn)略咨詢報告
- 戰(zhàn)術(shù)執(zhí)行培訓協(xié)議書(2篇)
- 《色彩基礎》課程標準
- 人力資源 -人效評估指導手冊
- 大疆80分鐘在線測評題
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 2024中考復習必背初中英語單詞詞匯表(蘇教譯林版)
- 《現(xiàn)代根管治療術(shù)》課件
- 肩袖損傷的護理查房課件
- 2023屆北京市順義區(qū)高三二模數(shù)學試卷
- 公司差旅費報銷單
- 2021年上海市楊浦區(qū)初三一模語文試卷及參考答案(精校word打印版)
- 八年級上冊英語完形填空、閱讀理解100題含參考答案
評論
0/150
提交評論