Lua文件讀寫(xiě)詳解
lua里的文件讀寫(xiě)模型來(lái)自C語(yǔ)言,分為完整模型(和C一樣)、簡(jiǎn)單模型。
1、簡(jiǎn)單模型
io.input([file]) 設(shè)置默認(rèn)的輸入文件,file為文件名(此時(shí)會(huì)以文本讀入)或文件句柄(可以理解為把柄,有了把柄就可以找到文件),返回文件句柄。
io.output([file]) 設(shè)置默認(rèn)的輸出文件,參數(shù)意義同上。
io.close([file]) 關(guān)閉文件,不帶參數(shù)關(guān)閉默認(rèn)的文件
io.read(formats) 讀入默認(rèn)文件,formats取值為"*a"(讀入全部)、“*n”(按數(shù)字讀入)、 "*l"(按行讀入,默認(rèn)方式)、n(即數(shù)字,讀取n個(gè)字符)。
io.lines([fn]) fn文件名,若無(wú)文件,取默認(rèn)文件,返回一個(gè)迭代器,可以用在for循環(huán)里。
io.write(value)向默認(rèn)文件寫(xiě)入內(nèi)容。
io.flush() 把文件緩存里的操作立即作用到默認(rèn)輸出文件。
例子在最后。
2、完整模型
簡(jiǎn)單模型里只能處理文本類(lèi)型的文件,在完整模型里可以處理二進(jìn)制文件。
處理文件的一般流程為:打開(kāi)文件,獲取文件的句柄;以文件句柄操作文件;關(guān)閉文件。
可以看到完整模型比簡(jiǎn)單模型復(fù)雜點(diǎn),但優(yōu)點(diǎn)是功能更強(qiáng)大。
io.open (fn [, m]) 打開(kāi)文件,返回文件句柄,fn文件名,m模式有:
r 以只讀方式打開(kāi)文件,該文件必須存在。
w 打開(kāi)只寫(xiě)文件,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以附加的方式打開(kāi)只寫(xiě)文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫(xiě)入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。(EOF符保留)
r+ 以可讀寫(xiě)方式打開(kāi)文件,該文件必須存在。
w+ 打開(kāi)可讀寫(xiě)文件,若文件存在則文件長(zhǎng)度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a+ 與a類(lèi)似,但此文件可讀可寫(xiě)
b 二進(jìn)制模式,如果文件是二進(jìn)制文件,可以加上b
+ 號(hào)表示對(duì)文件既可以讀也可以寫(xiě)
以下的file是io.open返回的文件句柄,功能與簡(jiǎn)單模式類(lèi)似,不再詳述。
file :close ()
file :read ( formats )
file :lines ()
file :write ( values )
file :seek ([p] [, of]) 設(shè)置文件讀寫(xiě)的偏移,p文件偏移起始位置(取值有"set",文件頭,此為默認(rèn)值,"cur"當(dāng)前位置、"end"文件尾),of偏移量(默認(rèn)值0,正的表示向前,負(fù)的表示向后),返回在文件里新的當(dāng)前位置。
file :flush ()
3、示例
------------------簡(jiǎn)單模型-----------------
--讀
local file1=io.input("1.txt") --當(dāng)前目錄"1.txt"要存在,不然出錯(cuò)
local str=io.read("*a")
print(str)
--寫(xiě)
local file2=io.output("2.txt") --當(dāng)前目錄"2.txt"不需要存在
io.write(str)
io.flush()
io.close()
--利用這幾個(gè)函數(shù)可以做一個(gè)文件復(fù)制的函數(shù)
function copy(fileA,fileB)
local file1=io.input(fileA)
if not file1 then print(fileA.."不存在") return end
local str=io.read("*a")
local file2=io.output(fileB)
io.write(str)
io.flush()
io.close()
end
for line in io.lines("1.txt") do
print(line)
end
------------------完整模型-----------------
local f=io.open("3.txt","a+")
f:write("Happy New Year!")
f:flush()
f:seek("end",-1) --定位到文件末尾前一個(gè)字節(jié)
local str=f:read(1) --讀取一個(gè)字符
print(str) --輸出"!"
f:close()
相關(guān)文章
Lua面向?qū)ο缶幊讨A(chǔ)結(jié)構(gòu)table簡(jiǎn)例
今天小編就為大家分享一篇關(guān)于Lua面向?qū)ο缶幊讨A(chǔ)結(jié)構(gòu)table簡(jiǎn)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Lua中使用table.concat連接大量字符串實(shí)例
這篇文章主要介紹了Lua中使用table.concat連接大量字符串實(shí)例,本文是Lua處理大量字符串的一個(gè)測(cè)試文章,測(cè)試了2種方法處理大量字符串的消耗時(shí)間,需要的朋友可以參考下2014-09-09Lua中關(guān)于元方法的一些知識(shí)點(diǎn)小結(jié)
這篇文章主要介紹了Lua中關(guān)于元方法的一些知識(shí)點(diǎn)小結(jié),本文講解了兩個(gè)具有不同元表的值進(jìn)行算術(shù)操作、關(guān)系類(lèi)的元方法、保護(hù)元表,需要的朋友可以參考下2014-09-09實(shí)例講解Lua中pair和ipair的區(qū)別
這篇文章主要介紹了實(shí)例講解Lua中pair和ipair的區(qū)別,本文直接用實(shí)例代碼來(lái)講解pair和ipair的區(qū)別,需要的朋友可以參考下2015-04-04Lua 操作 MongoDB 數(shù)據(jù)庫(kù)實(shí)例
這篇文章主要介紹了Lua 操作 MongoDB 數(shù)據(jù)庫(kù)實(shí)例,本文給出了修改后的lua-mongo API和具體的操作MongoDB 數(shù)據(jù)庫(kù)代碼,需要的朋友可以參考下2015-03-03