檔案操作
file.
copy(「source」, 「targetfilename」, true);
//檔案拷貝
,true
表示當檔案存在時「覆蓋」,如果不加
true,
則檔案存在報異常。
file.exists();//判斷檔案是否存在
file.move(「source」,「target」);//移動(剪下),思考如何為檔案重新命名?檔案的剪下是可以跨磁碟的。
file.delete(「path」);
//刪除。如果檔案不存在?不存在,不報錯
file.create(「path」);//建立檔案
file.readalllines(「path」,encoding.default);//讀取所有行,返回string
file.readalltext(「path」,encoding.default);//讀取所有文字返回string
file.readallbytes(「path」);//讀取檔案,返回byte,把檔案作為二進位制來處理。
l****************************************===
file.writealllines(「path」,new string[4] ,encoding.default);//將string陣列按行寫入檔案。
file.writealltext(「path」,「string」);//將字串全部寫入檔案
file.writeallbytes(「path」,newbyte[5]);//將byte全部寫入到檔案
檔案流操作
filestream fs=file.open(); //返回filestream
filestream fs=file.openread();//返回唯讀的filestream
filestream fs=file.openwrite();//返回只寫的filestream
filestream fs=new filestream(引數);
stream(所有流的父類,是乙個抽象類。)
檔案操作的類都在system.io.*;
拷貝檔案的兩種方式:將原始檔內容全部讀到記憶體中,再寫到目標檔案中;讀取原始檔的1kb記憶體,寫到目標檔案中,再讀取原始檔的1kb記憶體,再寫到目標檔案中……。第二種方式就是一種流的操作。
l用file.readalltext、file.writealltext進行檔案讀寫是一次性讀、寫,如果檔案非常大會佔記憶體、慢。需要讀一行處理一行的機制,這就是流(stream)。stream會只讀取要求的位置、長度的內容。
stream不會將所有內容一次性讀取到記憶體中,有乙個指標,指標指到**才能讀、寫到**。
流有很多種類,檔案流是其中一種。filestream類newfilestream(「c:/a.txt」, filemode,fileaccess)後兩個引數可選值及含義自己看。filestream可讀可寫。可以使用file.openread、file.openwrite這兩個簡化呼叫方法。
byte是任何資料的最根本表示形式,任何資料最終都是二進位制。
filestream的
position屬性為當前檔案指標位置,每寫一次就要移動一下position以備下次寫到後面的位置。write用於向當前位置寫入若干位元組,read使用者讀取若干位元組。
使用filestream寫入文字檔案。
通過filestream寫入讀取文字檔案。對於中文如果每次讀取1個byte會有什麼效果?更好的選擇→streamreader
使用filestream讀取文字檔案。
使用filestream進行大檔案拷貝。
file.readallbytes()與file.writeallbytes()進行檔案拷貝。(檢視記憶體使用情況)
使用using可以方便的釋放資源(自動呼叫dispose方法)
只有實現了idispose介面的類才能使用using釋放資源
stream把所有內容當成二進位制來看待,如果是文字內容,則需要程式設計師來處理文字和二進位制之間的轉換。
用streamwriter可以簡化文字型別的stream的處理
streamwriter是輔助stream進行處理的
using (streamwriter writer = new streamwriter(stream, encoding))
和streamwriter類似, streamreader簡化了文字型別的流的讀取。
stream stream = file.openread("c:/1.txt");
using (streamreader reader = new streamreader(stream,encoding))
readtoend用於從當前位置一直讀到最後,內容大的話會佔記憶體;每次呼叫都往下走,不能無意中呼叫了兩次
readline讀取一行,如果到了末尾,則返回null。
文字檔案編碼,文字檔案有不同的儲存方式,將字串以什麼樣的形式儲存為二進位制,這個就是編碼,utf-8、ascii、unicode等,如果出現亂碼一般就是編碼的問題,文字檔案相關的函式一般都有乙個encoding型別的引數,取得編碼的方式:encoding.default、encoding.utf8、encoding.getencoding("gbk")
檔案編碼(碼表)
•ascii:英文碼表,每個字元佔1個位元組。
•gb2312:相容ascii,包含中文。每個英文佔乙個位元組(正數),中文佔兩個位元組(負數)
•big5:正體中文
•unicode:國際碼表,中文英文都站2個位元組。
•utf-8:國際碼表,英文佔1個位元組,中文佔3個位元組。
l輸出encoding.getencodings(),所有編碼。
什麼是文字檔案。拖到記事本中還能看得懂的就是文字檔案,doc不是。
file類的常用靜態方法:(fileinfo*)
•bool exists(string path)判斷檔案path是否存在
•stringreadalllines(string path) 讀取文字檔案到字串陣列中
•stringreadalltext(string path) 讀取文字檔案到字串中
•voidwritealltext(string path, string contents)將文字contents儲存到檔案path中,會覆蓋舊內容。
•writealllines(string path,string contents),將字串陣列逐行儲存到檔案path中,會覆蓋舊內容。
正數對應的二進位製取反 ,再加
1就是負數的二進位制。
encoding.default
system.text.dbcscodepageencoding
雙位元組字符集。如果輸出
encodingname
的話,結果為:簡體中文
(gb2312)
encoding.default:與作業系統的當前「區域與語言選項」有關。
如果系統中沒有提供編碼,則可以通過
getencoding("
編碼的額字串表示
")獲得該編碼。
//encodingencoding=encoding.getencoding("gb2312");
stringbuilder
sb =new
stringbuilder
();
encodinginfo
infos = system.text.encoding.getencodings();
for
(int
i = 0; i < infos.length; i++)
file.writealltext("encodings.txt"
,sb.tostring());
操作檔案File類方法
檔案操作 file.copy source targetfilename true 檔案拷貝 true 表示當檔案存在時 覆蓋 如果不加 true,則檔案存在報異常。file.exists 判斷檔案是否存在 file.move source target 移動 剪下 思考如何為檔案重新命名?檔案的剪...
用py操作檔案(file類的功能)
用py操作檔案 1 找到檔案並開啟 f open filename 2 讀 修改 f.read 為空即讀所有 f.write 修改的內容 3 儲存 關閉 f.close 儲存並關閉 檔案開啟模式只能以一種形式開啟 r 即read w 即write,建立模式,如果檔案裡有內容用w的話會把原來的檔案清空...
(檔案操作)File類操作深入
範例 正常的路徑編寫 file file new file f file.separator test file.separator test.txt 表示分隔符但是隨著系統的適應性不斷加強,對於當前的路徑操作也可以隨意使用了 不區分 在使用file類進行檔案處理的時候需要注意的是 程式 jvm 作...