版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1.1系統(tǒng)技術(shù)棧介紹——文件操作System.IO命名空間File類和FileInfo類Directory類和DirectoryInfo類FileStream類流和文件流StreamReader類和StreamWriter類Path類BufferedStream類序列化與反序列化知識(shí)回顧String類高效的StringBuilder類DateTime類Random類學(xué)習(xí)目標(biāo)通過本節(jié)學(xué)習(xí)可以:重點(diǎn)學(xué)習(xí)File類和FileInfo類重點(diǎn)學(xué)習(xí)FileStream類重點(diǎn)學(xué)習(xí)StreamReader類和StreamWriter類掌握Directory類和DirectoryInfo類掌握Path類掌握BufferedStream類掌握序列化與反序列化了解流和文件流了解System.IO命名空間01流和文件流流和文件流在計(jì)算機(jī)中,無論是文本、圖片、音頻還是視頻,所有的文件都是以二進(jìn)制(字節(jié))形式存儲(chǔ)的。為此,C#專門針對(duì)文件的輸入輸出操作提供了一系列的流,統(tǒng)稱為文件流。文件流是程序中最常用的流,根據(jù)數(shù)據(jù)的傳輸方向可將其分為輸入流和輸出流。為了方便理解,可以把輸入流和輸出流比作兩根“水管”,如下圖所示。集合概述流和文件流上圖中,輸入流被看作是一個(gè)輸入管道,輸出流被看作是一個(gè)輸出管道,數(shù)據(jù)通過輸入流從源設(shè)備輸入到程序中,通過輸出流從程序中輸出到目標(biāo)設(shè)備中,從而實(shí)現(xiàn)數(shù)據(jù)的傳輸。由此可見,文件流中的輸入輸出都是相對(duì)于程序而言的。流和文件流02System.IO命名空間System.io命名空間在C#中,文件操作類都位于System.IO命名空間中,因此在使用這些類時(shí)需要引入System.IO命名空間。該命名空間中包含了很多類,為了方便初學(xué)者更好地學(xué)習(xí),接下來通過一個(gè)圖例來介紹System.IO命名空間中的常用類,如下圖所示。System.IO命名空間System.io命名空間上圖中列舉了一些常用的類,這些類大致可分為操作目錄的類、操作文件的類、操作文件路徑的類等。其中,Directory和DirectoryInfo屬于操作目錄的類,F(xiàn)ileStream、File和FileInfo屬于操作文件的類,StreamReader、StreamWriter類屬于操作文本文件的類,Path類屬于操作文件路徑的類。System.IO命名空間03File類和FileInfo類File類File類是一個(gè)靜態(tài)類,它提供了許多靜態(tài)方法,用于處理文件,使用這些方法可以對(duì)文件進(jìn)行創(chuàng)建、移動(dòng)、查詢和刪除等操作,接下來介紹File類中的一些常用靜態(tài)方法,如下表所示。方法說明FileStreamCreate(stringpath)根據(jù)傳入的路徑創(chuàng)建一個(gè)文件,如果文件不存在,則創(chuàng)建文件,如果存在且不是只讀的,則覆蓋其內(nèi)容。voidDelete(stringpath)如果文件存在,則刪除指定的文件,如果指定的文件不存在也不引發(fā)異常。boolExists(stringpath)判斷指定文件是否存在,若存在則返回ture,否則返回false。voidMove(stringsourceFileName,stringdestFileName)將指定的文件移動(dòng)到新位置,可以在新位置為文件指定不同的名稱。FileStreamOpen(stringpath,FileModemode)打開指定路徑上的文件并返回FileStream對(duì)象。voidCopy(stringsourceFileName,stringdestFileName)將現(xiàn)有的文件內(nèi)容復(fù)制到新文件中,可以指定是否允許覆蓋同名的文件。File類File類接下來通過一個(gè)案例來演示如何調(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類相對(duì)路徑是指當(dāng)前文件相對(duì)于與其他文件(或文件夾)之間的路徑關(guān)系。例如,如果在路徑D:\workspace\a\b\下有程序文件b.cs和文本文件a.txt,那么相對(duì)于b.cs文件,a.txt文件與它就是在同一文件目錄下,在b.cs文件中調(diào)用a.txt文件時(shí),直接寫文件名即可。相對(duì)路徑使用符號(hào)“/”表示,具體使用方式如下:在斜杠前面加一個(gè)點(diǎn)“./”表示上一級(jí)目錄;在斜杠前面加兩個(gè)點(diǎn)“../”表示當(dāng)前文件的根目錄。絕對(duì)路徑是指文件在磁盤上的完整路徑,例如b.cs程序調(diào)用a.txt時(shí)填寫D:\workspace\a\b\a.txt,在程序中使用絕對(duì)路徑時(shí)需要注意該路徑的位置,當(dāng)該位置發(fā)生改變時(shí)可能會(huì)導(dǎo)致異常。多學(xué)一招FileInfo類FileInfo類與File類比較類似,它們都可以對(duì)磁盤上的文件進(jìn)行操作。不同的是FileInfo類是實(shí)例類,所有的方法都只能在實(shí)例化對(duì)象后才能調(diào)用。創(chuàng)建FileInfo類的對(duì)象時(shí)必須傳遞一個(gè)文件路徑作為參數(shù),具體代碼如下:FileInfoaFile=newFileInfo(@"C:\Data.txt");上述代碼表示使用FileInfo類創(chuàng)建一個(gè)對(duì)象,將文件路徑作為參數(shù),而路徑中@符號(hào)表示不解析轉(zhuǎn)義字符,如果沒有@前綴就需要用“\\”替代“\”。通過前面的學(xué)習(xí)可知,“\”是一個(gè)轉(zhuǎn)義字符,在程序中要表示一個(gè)“\”就需要使用“\\”。例如下面這行代碼:FileInfoaFile=newFileInfo("C:\\Data.txt");FileInfo類FileInfo類FileInfo類中除了有許多與File類相似的方法外,同時(shí)也有它特有的屬性,如下表所示。屬性說明Directory該屬性用于檢索一個(gè)DirectoryInfo對(duì)象,表示當(dāng)前文件所在的目錄。DirectoryName該屬性用于返回文件目錄,而且這個(gè)屬性是只讀的。IsReadOnly該屬性用于判斷文件是否是只讀的。Length該屬性用于獲取文件的大?。ㄒ宰止?jié)為單位),并返回long值。FileInfo類Fileinfo類接下來通過一個(gè)案例來學(xué)習(xí)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("文件當(dāng)前目錄為:"+aFile.Directory);Console.WriteLine("文件大小為:"+aFile.Length);Console.ReadKey();}FileInfo類實(shí)例化FileInfo類創(chuàng)建文件判斷文件是否存在思考題簡述File類和FileInfo類的異同。04Directory類和DirectoryInfo類Directory類Directory類是一個(gè)靜態(tài)類,不可實(shí)例化,并且提供了許多靜態(tài)方法用于對(duì)文件的存放目錄進(jìn)行操作,例如創(chuàng)建、刪除、查詢和移動(dòng)目錄等。Directory類操作文件目錄的常用方法如下表所示。屬性說明DirectoryInfoCreateDirectory(stringpath)創(chuàng)建指定路徑的所有目錄和子目錄voidDelete(stringpath)刪除指定路徑的空目錄boolExists(stringpath)判斷指定路徑目錄是否存在,若存在,則返回ture,否則,返回false。DirectoryInfoGetParent()查找指定路徑的父目錄,包括相對(duì)路徑和絕對(duì)路徑voidMove(stringsourceDirName,stringdestDirName)將文件或目錄及其內(nèi)容移動(dòng)到新位置。Directory類Directory類接下來通過一個(gè)簡單的案例來學(xué)習(xí)這些方法的使用,具體代碼如下所示。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)建多級(jí)目錄判斷目錄是否存在刪除沒有內(nèi)容的目錄Directoryinfo類DirectoryInfo是一個(gè)非靜態(tài)類,可以進(jìn)行實(shí)例化。該類的功能與Directory類相似,也可以對(duì)文件的目錄進(jìn)行創(chuàng)建、刪除、查詢、移動(dòng)等操作。實(shí)現(xiàn)對(duì)目錄操作的常見方法與屬性如下表所示。屬性或方法說明Parent屬性,獲取指定子目錄的父目錄Root屬性,獲取路徑的根目錄Name屬性,獲取當(dāng)前DirectoryInfo對(duì)象的名稱Exists屬性,判斷指定目錄是否存在Create()方法,創(chuàng)建目錄GetDirectories(stringpath)方法,獲取當(dāng)前目錄的子目錄CreateSubdirectory(stringpath)方法,在指定路徑中創(chuàng)建一個(gè)或多個(gè)子目錄GetFiles()方法,獲取當(dāng)前目錄的文件列表Delete()方法,刪除指定的目錄及其內(nèi)容GetFileSystemInfos()方法,獲取當(dāng)前目錄的子目錄和文件列表MoveTo(stringdestDirName)方法,將指定目錄及其內(nèi)容移到新位置DirectoryInfo類Directoryinfo類接下來通過一個(gè)案例來演示一下這些屬性與方法的使用,具體代碼如下所示。staticvoidMain(string[]args){stringpath=@"D:\workspace\Chapter09\Program04\bin\Debug\Test";DirectoryInfodi=newDirectoryInfo(path);di.Create();Console.WriteLine("當(dāng)前目錄名稱為:"+di.Name);Console.WriteLine("父目錄名為:"+di.Parent);Console.WriteLine("根目錄為:"+di.Root);stringpath1=@"D:\workspace\Chapter09\Program04\bin\Debug";DirectoryInfodi1=newDirectoryInfo(path1);DirectoryInfo類創(chuàng)建一個(gè)DirectoryInfo對(duì)象創(chuàng)建目錄Directoryinfo類運(yùn)行結(jié)果如右圖所示:DirectoryInfo類//遍歷目錄下的所有文件,并找出包含P字符的文件名FileInfo[]files1=di1.GetFiles("*P*");foreach(variteminfiles1){Console.WriteLine("包含P字符的文件名稱為:"+item.Name);}Console.ReadKey();}獲取當(dāng)前目錄包含P字符的文件列表思考題簡述Directory類和DirectoryInfo類的異同。05Filestream類Filestream類簡介FileStream類表示在磁盤或網(wǎng)絡(luò)路徑上指向文件的流,并提供了在文件中讀寫字節(jié)和字節(jié)數(shù)組的方法,通過這些方法FileStream對(duì)象可以讀取諸如圖像、聲音、視頻、文本文件等,也就是說FileStream能夠處理各種數(shù)據(jù)文件。FileStream類有很多重載的構(gòu)造方法,其中最常用的是帶有三個(gè)參數(shù)的構(gòu)造方法,具體如下:FileStream(stringpath,FileModemode,FileAccessaccess);FileStream類簡介Filestream類簡介FileStream類還有一些常用的方法,如下表所示。方法說明intReadByte()從文件中讀取一個(gè)字節(jié),并將讀取位置提升一個(gè)字節(jié)。voidFlush()清除此流的緩沖區(qū),使得所有緩沖的數(shù)據(jù)都寫入到文件中。voidWriteByte(bytevalue)將一個(gè)字節(jié)寫入文件流的當(dāng)前位置。voidWrite(byte[]array,intoffset,intcount)從緩沖區(qū)讀取數(shù)據(jù)將字節(jié)塊寫入該流。intRead(byte[]array,intoffset,intcount)從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定緩沖區(qū)中。longSeek(longoffset,SeekOriginorigin)將該流的當(dāng)前位置設(shè)置為給定值。FileStream類簡介Filestream類讀取文件FileStream類除了可以以字節(jié)的方式讀取文件外,還可以對(duì)文件任意位置進(jìn)行讀取,在FileStream類的內(nèi)部有一個(gè)文件指針用于維護(hù)文件的位置,該指針指向文件進(jìn)行下一次讀寫操作的位置。大多數(shù)情況下,當(dāng)打開文件時(shí),指針就指向文件的開始位置,如果想修改指針的位置可以使用FileStream對(duì)象的Seek()方法,示例代碼如下:FileStreamaFile=File.OpenRead("Data.txt");aFile.Seek(8,SeekOrigin.Current);FileStream類讀取文件Filestream類讀取文件為了讓學(xué)生更好的學(xué)習(xí)FileStream類,接下來通過一個(gè)案例來演示FileStream類對(duì)文件的訪問操作,具體代碼如下所示。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類讀取文件設(shè)置當(dāng)前流的位置從流中讀取字節(jié)塊到byteData數(shù)組中將字節(jié)數(shù)組和內(nèi)部緩沖區(qū)中的字節(jié)解碼為字符數(shù)組Filestream類寫入文件接下來通過一個(gè)案例來演示FileStream類向文件寫入數(shù)據(jù),具體代碼如下所示。classProgram{staticvoidMain(string[]args){byte[]byteData;//定義一個(gè)字節(jié)數(shù)組
char[]charData;//定義一個(gè)字符數(shù)組
try{//創(chuàng)建FileStream流對(duì)象,并使用using關(guān)鍵字包含執(zhí)行代碼
using(FileStreamaFile=newFileStream("Data.txt",FileMode.Create)){//寫一段字符串并使用ToCharArray()方法轉(zhuǎn)換為字符存儲(chǔ)到字符數(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類寫入文件實(shí)例:復(fù)制文件接下來將調(diào)用FileStream類的Read()和Write()方法來實(shí)現(xiàn)復(fù)制一個(gè)文件的操作,具體代碼如下所示。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);//寫入文件
......}實(shí)例:復(fù)制文件實(shí)例:復(fù)制文件程序運(yùn)行成功后,在該項(xiàng)目的根目錄中打開a.txt文件和b.txt文件進(jìn)行對(duì)比結(jié)果如下圖所示。由運(yùn)行結(jié)果可知,a.txt文件內(nèi)容與b.txt文件內(nèi)容一致,因此說明文件復(fù)制成功了。實(shí)例:復(fù)制文件思考題簡述使用FileStream類進(jìn)行文件的讀寫操作。06StreamReader類和StreamWriter類StreamWriter類StreamWriter類用于將字符和字符串寫入到文件中,它實(shí)際上是先轉(zhuǎn)換為FileStream對(duì)象,然后向文件中寫入數(shù)據(jù),所以在創(chuàng)建對(duì)象時(shí)可以通過FileStream類的對(duì)象來創(chuàng)建StreamWriter類的對(duì)象,同時(shí)也可以直接創(chuàng)建StreamWriter類對(duì)象。當(dāng)FileStream類的對(duì)象存在時(shí),可以通過該對(duì)象來創(chuàng)建StreamWriter類的對(duì)象,具體代碼如下:FileStreamaFile=newFileStream("Data.txt",FileMode.CreateNew);StreamWritersw=newStreamWriter(aFile);StreamWriter類StreamWriter類除了前面的方式以外,還可以通過指定文件來創(chuàng)建StreamWriter類的對(duì)象,具體代碼如下:StreamWritersw=newStreamWriter("Data.txt");上述代碼表示創(chuàng)建一個(gè)StreamWriter流對(duì)象,并向Data.txt文件中寫入數(shù)據(jù)。如果Data.txt文件不存在,則創(chuàng)建該文件。接下來通過一個(gè)案例來學(xué)習(xí)StreamWriter類的使用方法,具體代碼如下所示。StreamWriter類StreamWriter類staticvoidMain(string[]args){try{//創(chuàng)建文件流對(duì)象,如果文件不存在則創(chuàng)建Data.txt文件
StreamWritersw=newStreamWriter("Data.txt");
sw.WriteLine(“深圳市信息職業(yè)技術(shù)學(xué)院");sw.Close();//關(guān)閉當(dāng)前流對(duì)象
Console.ReadKey();}catch(IOExceptionex){Console.WriteLine("文件操作異常");Console.WriteLine(ex.ToString());return;}}StreamWriter類向文件中寫入一段文字StreamWriter類運(yùn)行結(jié)果如下圖所示。由上圖中的運(yùn)行結(jié)果可知,文件Data.txt中成功寫入了一段文字。StreamWriter類StreamWriter類接下來通過一個(gè)案例來學(xué)習(xí)如何使用StreamWriter類的對(duì)象對(duì)文件進(jìn)行追加內(nèi)容的操作,具體代碼如下所示。try{//對(duì)Program09項(xiàng)目中的Data.txt進(jìn)行追加操作
stringpath=@"D:\workspace\Chapter09\Program09\bin\Debug\Data.txt";StreamWritersw=newStreamWriter(path,true);sw.WriteLine("網(wǎng)址:");
sw.Close();//關(guān)閉當(dāng)前流對(duì)象Console.ReadKey();}catch(IOExceptionex){Console.WriteLine("文件操作異常");Console.WriteLine(ex.ToString());return;}StreamWriter類向文件中追加一段文字StreamWriter類程序執(zhí)行成功之后,打開Program09項(xiàng)目根目錄下的Data.txt文件,該文件中的最初內(nèi)容與追加內(nèi)容后的對(duì)比如下圖所示。由上圖中的運(yùn)行結(jié)果可知,文件Data.txt中的內(nèi)容已經(jīng)追加了“網(wǎng)址:”。StreamWriter類Streamreader類當(dāng)FileStream類的對(duì)象存在時(shí),可以通過該對(duì)象來創(chuàng)建StreamReader類的對(duì)象,具體代碼如下:FileStreamaFile=newFileStream("Data.txt",FileMode.Open);StreamReadersr=newStreamReader(aFile);StreamReader類與StreamWriter類一樣,可以通過具體文件路徑的字符串來創(chuàng)建StreamReader類的對(duì)象,具體代碼如下:StreamReadersr=newStreamReader("Data.txt");StreamReader類Streamreader類接下來通過一個(gè)案例來演示StreamReader類的用法,將Program09項(xiàng)目的根目錄下的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)建讀取流對(duì)象讀取文件中的第一行如果文件不為空,則繼續(xù)讀取文件并輸出至控制臺(tái)當(dāng)文件讀取完畢后,關(guān)閉當(dāng)前流對(duì)象Streamreader類運(yùn)行結(jié)果如下圖所示。需要注意的是,程序在運(yùn)行過程中可能會(huì)出現(xiàn)異常,因此使用try…catch語句來捕獲異常,并將異常的類型設(shè)置為IOException,說明捕獲的是文件操作中的異常。StreamReader類實(shí)例:讀寫文件接下來通過一個(gè)文件讀寫的案例來學(xué)習(xí)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對(duì)象
sw.Dispose();//釋放StreamWriter對(duì)象
Console.ReadKey();實(shí)例:讀寫文件實(shí)例:讀寫文件運(yùn)行結(jié)果如下圖所示。由上圖中的運(yùn)行結(jié)果可知,Data.txt文件已讀寫成功并將文件中的信息輸出到控制臺(tái)。實(shí)例:讀寫文件思考題如何使用StreamReader類和StreamWriter類讀取和寫入文件?07Path類PATH類C#中提供了Path類(靜態(tài)類)。Path類中包含了一系列用于對(duì)文件路徑進(jìn)行操作的方法,具體如下表所示。方法說明stringCombine(paramsstring[]paths)將字符串或字符串?dāng)?shù)組組合成一個(gè)路徑stringGetDirectoryName(stringpath)返回指定路徑字符串的目錄信息stringGetExtension(stringpath)返回指定路徑字符串的擴(kuò)展名stringGetFileName(stringpath)返回指定路徑字符串的文件名和擴(kuò)展名stringGetFullPath(stringpath)返回指定路徑字符串的絕對(duì)路徑boolHasExtension(stringpath)確定路徑是否包括文件擴(kuò)展名stringGetPathRoot(stringpath)獲取指定路徑的根目錄信息stringGetTempPath()返回當(dāng)前用戶的臨時(shí)文件夾的路徑stringGetTempFileName()創(chuàng)建磁盤上唯一命名的零字節(jié)的臨時(shí)文件并返回該文件的完整路徑stringChangeExtension(stringpath,stringextension)更改路徑字符串的擴(kuò)展名Path類PATH類接下來通過具體案例來演示Path類中常用方法的使用,具體代碼如下所示。stringpath=@"D:\workspace\Chapter09\Program12\Data.txt";//修改文件的擴(kuò)展名
stringstr=Path.ChangeExtension(path,"exe");Console.WriteLine("修改文件擴(kuò)展名后:"+str);stringpath1=Path.Combine(@"E:\4.辦公\9.項(xiàng)目\20.教育板塊\5.深信息校企合作\工業(yè)管理軟件系統(tǒng)開發(fā)課件\C#基礎(chǔ)demo\Chapter09\Program10\bin\Debug\",@"\Data.txt");Console.WriteLine("拼接后的路徑:"+path1);
stringpath2=Path.GetDirectoryName(path);Console.WriteLine("返回的目錄信息為:"+path2);Path類拼接路徑獲取文件或文件夾的路徑Path類//獲取擴(kuò)展名
stringext=Path.GetExtension(path);Console.WriteLine("獲取擴(kuò)展名為:"+ext);//獲取文件名
Console.WriteLine("包含擴(kuò)展名:"+Path.GetFileName(path));Console.WriteLine("不包含擴(kuò)展名:"+Path.GetFileNameWithoutExtension(path));//由相對(duì)路徑獲取絕對(duì)路徑
stringstr1=Path.GetFullPath("Data.txt");Console.WriteLine("全路徑名字:"+str1);Console.ReadLine();Path類Path類運(yùn)行結(jié)果如下圖所示。Path類08BufferedStream類Bufferedstream類BufferedStream提供了幾個(gè)常用的操作方法,Read()方法、Write()方法和Flush()方法,具體分析如下:1. Read()方法Read()方法用于讀取緩沖區(qū)中的數(shù)據(jù),具體語法格式如下:2. Write()方法Write()方法用于將字節(jié)復(fù)制到緩沖流,并在緩沖流內(nèi)的當(dāng)前位置繼續(xù)寫入字節(jié),具體語法格式如下:publicoverrideintRead(byte[]array,intoffset,intcount);publicoverrideintWrite(byte[]array,intoffset,intcount);BufferedStream類BufferedStream類3.Flush()方法Flush()方法用于清除當(dāng)前流中的所有緩沖區(qū),使得所有緩沖的數(shù)據(jù)都被寫入到存儲(chǔ)設(shè)備中,具體語法格式如下:
publicoverridevoidFlush()接下來通過一個(gè)案例來演示將一個(gè)文件中的內(nèi)容寫入到另一個(gè)文件中。首先在解決方案Chapter09中創(chuàng)建一個(gè)項(xiàng)目名為Program13的控制臺(tái)應(yīng)用程序,然后在該項(xiàng)目的根目錄下分別創(chuàng)建一個(gè)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);//實(shí)例化緩沖流對(duì)象
myBStream2=newBufferedStream(myStream2);//開始讀取myBStream1流對(duì)象中的內(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流對(duì)象中的內(nèi)容,返回讀取的字節(jié)數(shù)向myBStream2流對(duì)象中寫入內(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類清空當(dāng)前流的緩沖空間關(guān)閉當(dāng)前流對(duì)象BufferedStream類運(yùn)行結(jié)果如下圖所示。注意:由于緩沖流在內(nèi)存的緩沖區(qū)中直接讀取數(shù)據(jù),而不是從磁盤中直接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024離婚雙方的共同債權(quán)債務(wù)處理合同
- 2024苗木種植與園林苗木種植基地規(guī)劃與建設(shè)勞務(wù)分包協(xié)議3篇
- 2024版活動(dòng)場地使用合同范本
- 2025年度生態(tài)農(nóng)業(yè)園承包合同格式規(guī)范4篇
- 2024鎳礦國際貿(mào)易法律事務(wù)咨詢服務(wù)合同3篇
- 2025年度新能源車輛代理記賬與補(bǔ)貼申請(qǐng)合同4篇
- 2025年度文化產(chǎn)業(yè)發(fā)展總經(jīng)理聘用協(xié)議3篇
- 《蒸汽鍋爐維護(hù)與管理》課件
- 2025年度個(gè)人二手房交易反擔(dān)保合同規(guī)范4篇
- 2025年度博物館展覽館日常保潔與文物保護(hù)合同4篇
- GB/T 31888-2015中小學(xué)生校服
- 質(zhì)量檢查考核辦法
- 不動(dòng)產(chǎn)登記實(shí)務(wù)培訓(xùn)教程課件
- 不銹鋼制作合同范本(3篇)
- 云南省普通初中學(xué)生成長記錄-基本素質(zhì)發(fā)展初一-初三
- 2023年系統(tǒng)性硬化病診斷及診療指南
- 外科醫(yī)師手術(shù)技能評(píng)分標(biāo)準(zhǔn)
- 《英語教師職業(yè)技能訓(xùn)練簡明教程》全冊(cè)配套優(yōu)質(zhì)教學(xué)課件
- 采購控制程序
- 六年級(jí)上冊(cè)數(shù)學(xué)簡便計(jì)算題200題專項(xiàng)練習(xí)
- 冀教版八年級(jí)上冊(cè)Unit 1 單詞短語句型復(fù)習(xí)預(yù)習(xí)單
評(píng)論
0/150
提交評(píng)論