Erlang用于操縱文件I/O的模塊有:
file模塊:打開、讀、寫、關(guān)閉文件已經(jīng)操作目錄的方法基本都在這里
filename模塊:提供平臺(tái)獨(dú)立方式用于操縱文件名
filelib模塊:file模塊的擴(kuò)展,提供了更多的實(shí)用工具,在file模塊基礎(chǔ)上構(gòu)建
io模塊:一系列用于操作打開的文件的方法,解析格式、格式化輸出等等。
1.打開文件:
復(fù)制代碼 代碼如下:
{ok,F}=file:open("data1.dat",read). %讀模式打開
{ok,F}=file:open("data1.dat",write). %寫模式
{ok,F}=file:open("data1.dat",[read,write]). %讀、寫、二進(jìn)制模式
支持的所有模式參見文檔。
2.讀?。?br />
(1)如果以一個(gè)Erlang term的方式讀取,采用:
復(fù)制代碼 代碼如下:
io:read(F,'').
其中第二個(gè)參數(shù)是提示符,用于在標(biāo)準(zhǔn)輸入時(shí)作為提示。
這個(gè)方法有一個(gè)變形read/3
復(fù)制代碼 代碼如下:
read(IoDevice, Prompt, StartLine)
第三個(gè)參數(shù)用于指定開始行數(shù)。
(2)如果是按字節(jié)讀取,文件必須按raw模式打開采用:
復(fù)制代碼 代碼如下:
{ok, Data}=file:read(F,100).
(3)按行讀取:
復(fù)制代碼 代碼如下:
io:get_line(F, '').
(4)讀取整個(gè)文件的內(nèi)容:
復(fù)制代碼 代碼如下:
{ok,Binary}=file:read_file("data1.dat").
注意返回的是一個(gè)binary類型
(5)隨機(jī)讀?。?br />
復(fù)制代碼 代碼如下:
{ok,Binary}=file:pread(F, 22, 46).
其中第二個(gè)參數(shù)是開始位置,第三個(gè)參數(shù)是讀取的長度,返回的也是binary類型。
3.寫入文件:
(1)采用io:format/3方法:
復(fù)制代碼 代碼如下:
{ok, S} = file:open("test2.dat", write).
io:format(S, "~s~n", ["Hello readers"]).
io:format(S, "~w~n", [123]).
其中的~開頭的字符是一個(gè)個(gè)格式化命令,比如常見的:
~c anscii碼
~f 浮點(diǎn)數(shù)
~s 字符串
~w Erlang term
~p 與~w類似,不過當(dāng)多行時(shí)將自動(dòng)換行
~n 顯然,換行符
(2)寫入整個(gè)文件:
復(fù)制代碼 代碼如下:
file:write_file(File, IO)
其中IO可以為list、integer或者binary類型
(3)隨機(jī)寫入:
復(fù)制代碼 代碼如下:
file:pwrite(F, 10, "new">>)
4.關(guān)閉文件:
復(fù)制代碼 代碼如下:
file:close(F).
5.目錄操作:=
都是linux命令風(fēng)格的操作,
復(fù)制代碼 代碼如下:
cd("/home/dennis/"). %進(jìn)入目錄
file:list_dir("."). %列出當(dāng)前目錄文件
file:make_dir("test"). %創(chuàng)建test目錄
file:del_dir("test"). %刪除test目錄
6.獲取文件信息,比如文件大小,最后修改時(shí)間等等。調(diào)用file:read_file_info/1方法,該方法返回一個(gè)file_info記錄類型,里面擁有文件的具體信息,比如type、size等。
復(fù)制代碼 代碼如下:
{ok, Facts} =file:read_file_info(File).
io:format("~s~n",{Facts#file_info.type, Facts#file_info.size}).
7.復(fù)制和刪除文件:
復(fù)制代碼 代碼如下:
file:copy(Source, Destination).
file:delete(File).
這個(gè)筆記僅僅記錄了一些常用到的方法,一些高級(jí)的工具方法并沒有涉及,具體參考Erlang的文檔。