操作檔案File類方法

2021-06-16 18:26:24 字數 4106 閱讀 6918

檔案操作

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 作...