詳見用法msdn:
用.net讀取文字檔案或寫入文字檔案,你都不須要擔心編碼方式。.net已經將這些封裝好了。在讀取乙個文字檔案的時候,如果你已經知道文字使用的是什麼編碼方式,你可以指定使用哪種編碼方式讀取文字,否則如果不指定編碼方式,.net會讀取文字的前幾個位元組來確定使用哪種編碼方式讀取檔案內容的。在寫入文字檔案的時候,你也可以指定你想使用的編碼方式。如果你沒有指定編碼,.net會根據寫入的文字是否含有特殊字元來決定編碼方式。如果沒有特殊字元,就採用ascii編碼,如果有特殊字元,就採用utf-8編碼。
(一) 讀取檔案
如果你要讀取的檔案內容不是很多,可以使用 file.readalltext(filepath) 或指定編碼方式 file.readalltext(filepath, encoding)的方法。
它們都一次將文字內容全部讀完,並返回乙個包含全部文字內容的字串
string str = file.readalltext(@"c:\temp\ascii.txt");
// 也可以指定編碼方式
string str2 = file.readalltext(@"c:\temp\ascii.txt", encoding.ascii);
也可以使用方法file.readalllines。該方法返回乙個字串陣列。每一行都是乙個陣列元素。
string strs = file.readalllines(@"c:\temp\ascii.txt");
// 也可以指定編碼方式
string strs2 = file.readalllines(@"c:\temp\ascii.txt", encoding.ascii);
當文字的內容比較大時,我們就不要將文字內容一次讀完,而應該採用流(stream)的方式來讀取內容。.net為我們封裝了streamreader類。初始化streamreader類有很多種方式。下面我羅列出幾種
streamreader sr1 = new streamreader(@"c:\temp\utf-8.txt");
// 同樣也可以指定編碼方式
streamreader sr2 = new streamreader(@"c:\temp\utf-8.txt", encoding.utf8);
filestream fs = new filestream(@"c:\temp\utf-8.txt", filemode.open, fileaccess.read, fileshare.none);
streamreader sr3 = new streamreader(fs);
streamreader sr4 = new streamreader(fs, encoding.utf8);
fileinfo myfile = new fileinfo(@"c:\temp\utf-8.txt");
// opentext 建立乙個utf-8 編碼的streamreader物件
streamreader sr5 = myfile.opentext();
// opentext 建立乙個utf-8 編碼的streamreader物件
streamreader sr6 = file.opentext(@"c:\temp\utf-8.txt");
初始化完成之後,你可以每次讀一行,也可以每次讀乙個字元 ,還可以每次讀幾個字元,甚至也可以一次將所有內容讀完。
// 讀一行
string nextline = sr.readline();
// 讀乙個字元
int nextchar = sr.read();
// 讀100個字元
int nchars = 100;
char chararray = new char[nchars];
int ncharsread = sr.read(chararray, 0, nchars);
// 全部讀完
string restofstream = sr.readtoend();
使用完streamreader之後,不要忘記關閉它: sr.closee();
假如我們需要一行一行的讀,將整個文字檔案讀完,下面看乙個完整的例子:
streamreader sr = file.opentext(@"c:\temp\ascii.txt");
string nextline;
while ((nextline = sr.readline()) != null)
sr.close();
(二) 寫入檔案
寫檔案和讀檔案一樣,如果你要寫入的內容不是很多,可以使用file.writealltext方法來一次將內容全部寫如檔案。如果你要將乙個字串的內容寫入檔案,可以用file.writealltext(filepath) 或指定編碼方式 file.writealltext(filepath, encoding)方法。
string str1 = "good morning!"; file.writealltext(@"c:\temp\test\ascii.txt", str1); // 也可以指定編碼方式 file.writealltext(@"c:\temp\test\ascii-2.txt", str1, encoding.ascii);
string strs = ; file.writealllines(@"c:\temp\ascii.txt", strs); file.writealllines(@"c:\temp\ascii-2.txt", strs, encoding.ascii);
使用file.writealltext或file.writealllines方法時,如果指定的檔案路徑不存在,會建立乙個新檔案;如果檔案已經存在,則會覆蓋原檔案。
當要寫入的內容比較多時,同樣也要使用流(stream)的方式寫入。.net封裝的類是streamwriter。初始化streamwriter類同樣有很多方式:
streamwriter sw2 = new streamwriter(@"c:\temp\utf-8.txt", true, encoding.utf8);
// filemode.createnew: 如果檔案不存在,建立檔案;如果檔案已經存在,丟擲異常
filestream fs = new filestream(@"c:\temp\utf-8.txt", filemode.createnew, fileaccess.write, fileshare.read);
// utf-8 為預設編碼
streamwriter sw3 = new streamwriter(fs);
streamwriter sw4 = new streamwriter(fs, encoding.utf8);
// 如果檔案不存在,建立檔案; 如果存在,覆蓋檔案
fileinfo myfile = new fileinfo(@"c:\temp\utf-8.txt");
streamwriter sw5 = myfile.createtext();
初始化完成後,可以用streamwriter物件一次寫入一行,乙個字元,乙個字元陣列,甚至乙個字元陣列的一部分。
// 寫乙個字元
sw.write('a');
// 寫乙個字元陣列
char chararray = new char[100];
// initialize these characters
sw.write(chararray);
// 寫乙個字元陣列的一部分
sw.write(chararray, 10, 15);
同樣,streamwriter物件使用完後,不要忘記關閉。sw.close(); 最後來看乙個完整的使用streamwriter一次寫入一行的例子:
fileinfo myfile = new fileinfo(@"c:\temp\utf-8.txt");
streamwriter sw = myfile.createtext();
string strs = ;
foreach (var s in strs)
sw.close();
總結 IO之File類《一》
io流 input output 位元組流輸入位元組流 inputstream 所有輸入位元組流的基類 抽象類 fileinputstream 讀取檔案資料的輸入位元組流 bufferedinputstream 緩衝輸入字元流 該類出現的目的是為了提高讀取檔案 資料的效率。這個類其實只不過是在內部維...
黑馬程式設計師 File類學習總結
file 類,是將檔案或資料夾封裝成物件的類,是檔案或者資料夾物件。new file 物件時引數中是檔案或者資料夾的字串名稱。file 可以作為流物件的引數,同檔名字串作為流物件引數一樣。file類的常用方法總結 1,建立。先new 乙個file 物件,如 file f new file c 123...
File類常用方法總結(有待補充)
file類代表乙個特定的檔案或者目錄,並提供了若干方法對該檔案或目錄進行操作。file類構造方法 分別使用三種構造方法建立物件如下 file file newfile f yunwendang t.txt if file.isfile else file newfile f yunwendang t...