Lua I/O 庫用于讀取和處理文件丁频。分為簡單模式(和C一樣)杉允、完全模式。
簡單模式(simple model)擁有一個(gè)當(dāng)前輸入文件和一個(gè)當(dāng)前輸出文件席里,并且提供針對(duì)這些文件相關(guān)的操作叔磷。
完全模式(complete model) 使用外部的文件句柄來實(shí)現(xiàn)。它以一種面對(duì)對(duì)象的形式奖磁,將所有的文件操作定義為文件句柄的方法
簡單模式在做一些簡單的文件操作時(shí)較為合適改基。但是在進(jìn)行一些高級(jí)的文件操作的時(shí)候,簡單模式就顯得力不從心咖为。例如同時(shí)讀取多個(gè)文件這樣的操作秕狰,使用完全模式則較為合適。
打開文件操作語句如下:
mode 的值有:
簡單模式
簡單模式使用標(biāo)準(zhǔn)的 I/O 或使用一個(gè)當(dāng)前輸入文件和一個(gè)當(dāng)前輸出文件躁染。
以下為 file.lua 文件代碼鸣哀,操作的文件為test.lua(如果沒有你需要?jiǎng)?chuàng)建該文件),代碼如下:
執(zhí)行以上代碼褐啡,你會(huì)發(fā)現(xiàn)诺舔,輸出了 test.ua 文件的第一行信息,并在該文件最后一行添加了 lua 的注釋。如我這邊輸出的是:
在以上實(shí)例中我們使用了 io."x" 方法低飒,其中 io.read() 中我們沒有帶參數(shù)许昨,參數(shù)可以是下表中的一個(gè):
其他的 io 方法有:
io.tmpfile():返回一個(gè)臨時(shí)文件句柄,該文件以更新模式打開褥赊,程序結(jié)束時(shí)自動(dòng)刪除
io.type(file):檢測(cè)obj是否一個(gè)可用的文件句柄
io.flush():向文件寫入緩沖中的所有數(shù)據(jù)
io.lines(optional file name):返回一個(gè)迭代函數(shù),每次調(diào)用將獲得文件中的一行內(nèi)容,當(dāng)?shù)轿募矔r(shí)糕档,將返回nil,但不關(guān)閉文件
完全模式
通常我們需要在同一時(shí)間處理多個(gè)文件。我們需要使用 file:function_name 來代替 io.function_name 方法拌喉。以下實(shí)例演示了如同同時(shí)處理同一個(gè)文件:
執(zhí)行以上代碼速那,你會(huì)發(fā)現(xiàn),輸出了 test.ua 文件的第一行信息尿背,并在該文件最后一行添加了 lua 的注釋端仰。如我這邊輸出的是:
read 的參數(shù)與簡單模式一致。
其他方法:
file:seek(optional whence, optional offset):設(shè)置和獲取當(dāng)前文件位置,成功則返回最終的文件位置(按字節(jié)),失敗則返回nil加錯(cuò)誤信息田藐。參數(shù) whence 值可以是:
"set": 從文件頭開始
"cur": 從當(dāng)前位置開始[默認(rèn)]
"end": 從文件尾開始
offset:默認(rèn)為0
不帶參數(shù)file:seek()則返回當(dāng)前位置,file:seek("set")則定位到文件頭,file:seek("end")則定位到文件尾并返回文件大小
file:flush():向文件寫入緩沖中的所有數(shù)據(jù)
io.lines(optional file name):打開指定的文件filename為讀模式并返回一個(gè)迭代函數(shù),每次調(diào)用將獲得文件中的一行內(nèi)容,當(dāng)?shù)轿募矔r(shí)荔烧,將返回nil,并自動(dòng)關(guān)閉文件。
若不帶參數(shù)時(shí)io.lines() <=> io.input():lines(); 讀取默認(rèn)輸入設(shè)備的內(nèi)容汽久,但結(jié)束時(shí)不關(guān)閉文件,如
以下實(shí)例使用了 seek 方法鹤竭,定位到文件倒數(shù)第 25 個(gè)位置并使用 read 方法的 *a 參數(shù),即從當(dāng)期位置(倒數(shù)第 25 個(gè)位置)讀取整個(gè)文件景醇。
我這邊輸出的結(jié)果是:
內(nèi)容來自:runoob.com 菜鳥教程
整理:極動(dòng)云臀稚,寧波家電物聯(lián)網(wǎng)云平臺(tái)
CONTACT US: http://www.iot-jd.com