W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Lua I/O 庫提供兩種不同的方式處理文件:隱式文件描述,顯式文件描述。
這些文件 I/O 操作,在 OpenResty 的上下文中對事件循環(huán)是會產(chǎn)生阻塞效應(yīng)。OpenResty 比較擅長的是高并發(fā)網(wǎng)絡(luò)處理,在這個環(huán)境中,任何文件的操作,都將阻塞其他并行執(zhí)行的請求。實際中的應(yīng)用,在 OpenResty 項目中應(yīng)盡可能讓網(wǎng)絡(luò)處理部分、文件 I/0 操作部分相互獨(dú)立,不要揉和在一起。
設(shè)置一個默認(rèn)的輸入或輸出文件,然后在這個文件上進(jìn)行所有的輸入或輸出操作。所有的操作函數(shù)由 io 表提供。
打開已經(jīng)存在的 test1.txt 文件,并讀取里面的內(nèi)容
file = io.input("test1.txt") -- 使用 io.input() 函數(shù)打開文件
repeat
line = io.read() -- 逐行讀取內(nèi)容,文件結(jié)束時返回nil
if nil == line then
break
end
print(line)
until (false)
io.close(file) -- 關(guān)閉文件
--> output
my test file
hello
lua
在 test1.txt 文件的最后添加一行 "hello world"
file = io.open("test1.txt", "a+") -- 使用 io.open() 函數(shù),以添加模式打開文件
io.output(file) -- 使用 io.output() 函數(shù),設(shè)置默認(rèn)輸出文件
io.write("\nhello world") -- 使用 io.write() 函數(shù),把內(nèi)容寫到文件
io.close(file)
在相應(yīng)目錄下打開 test1.txt 文件,查看文件內(nèi)容發(fā)生的變化。
使用 file:XXX() 函數(shù)方式進(jìn)行操作, 其中 file 為 io.open() 返回的文件句柄。
打開已經(jīng)存在的 test2.txt 文件,并讀取里面的內(nèi)容
file = io.open("test2.txt", "r") -- 使用 io.open() 函數(shù),以只讀模式打開文件
for line in file:lines() do -- 使用 file:lines() 函數(shù)逐行讀取文件
print(line)
end
file:close()
-->output
my test2
hello lua
在 test2.txt 文件的最后添加一行 "hello world"
file = io.open("test2.txt", "a") -- 使用 io.open() 函數(shù),以添加模式打開文件
file:write("\nhello world") -- 使用 file:write() 函數(shù),在文件末尾追加內(nèi)容
file:close()
在相應(yīng)目錄下打開 test2.txt 文件,查看文件內(nèi)容發(fā)生的變化。
按指定的模式 mode,打開一個文件名為 filename 的文件,成功則返回文件句柄,失敗則返回 nil 加錯誤信息。模式:
模式 | 含義 | 文件不存在時 |
---|---|---|
"r" | 讀模式 (默認(rèn)) | 返回nil加錯誤信息 |
"w" | 寫模式 | 創(chuàng)建文件 |
"a" | 添加模式 | 創(chuàng)建文件 |
"r+" | 更新模式,保存之前的數(shù)據(jù) | 返回nil加錯誤信息 |
"w+" | 更新模式,清除之前的數(shù)據(jù) | 創(chuàng)建文件 |
"a+" | 添加更新模式,保存之前的數(shù)據(jù),在文件尾進(jìn)行添加 | 創(chuàng)建文件 |
模式字符串后面可以有一個 'b',用于在某些系統(tǒng)中打開二進(jìn)制文件。
注意 "w" 和 "wb" 的區(qū)別
關(guān)閉文件。注意:當(dāng)文件句柄被垃圾收集后,文件將自動關(guān)閉。句柄將變?yōu)橐粋€不可預(yù)知的值。
關(guān)閉文件,和 file:close() 的作用相同。沒有參數(shù) file 時,關(guān)閉默認(rèn)輸出文件。
把寫入緩沖區(qū)的所有數(shù)據(jù)寫入到文件 file 中。
相當(dāng)于 file:flush(),把寫入緩沖區(qū)的所有數(shù)據(jù)寫入到默認(rèn)輸出文件。
當(dāng)使用一個文件名調(diào)用時,打開這個文件(以文本模式),并設(shè)置文件句柄為默認(rèn)輸入文件; 當(dāng)使用一個文件句柄調(diào)用時,設(shè)置此文件句柄為默認(rèn)輸入文件; 當(dāng)不使用參數(shù)調(diào)用時,返回默認(rèn)輸入文件句柄。
返回一個迭代函數(shù), 每次調(diào)用將獲得文件中的一行內(nèi)容, 當(dāng)?shù)轿募矔r,將返回 nil,但不關(guān)閉文件。
打開指定的文件 filename 為讀模式并返回一個迭代函數(shù), 每次調(diào)用將獲得文件中的一行內(nèi)容, 當(dāng)?shù)轿募矔r,將返回 nil,并自動關(guān)閉文件。若不帶參數(shù)時 io.lines() 等價于 io.input():lines() 讀取默認(rèn)輸入設(shè)備的內(nèi)容,結(jié)束時不關(guān)閉文件。
類似于 io.input,但操作在默認(rèn)輸出文件上。
按指定的格式讀取一個文件。按每個格式將返回一個字符串或數(shù)字, 如果不能正確讀取將返回 nil,若沒有指定格式將指默認(rèn)按行方式進(jìn)行讀取。格式:
格式 | 含義 |
---|---|
"*n" | 讀取一個數(shù)字 |
"*a" | 從當(dāng)前位置讀取整個文件。若當(dāng)前位置為文件尾,則返回空字符串 |
"*l" | 讀取下一行的內(nèi)容。若為文件尾,則返回nil。(默認(rèn)) |
number | 讀取指定字節(jié)數(shù)的字符。若為文件尾,則返回nil。如果number為0,則返回空字符串,若為文件尾,則返回nil |
相當(dāng)于 io.input():read
檢測 obj 是否一個可用的文件句柄。如果 obj 是一個打開的文件句柄,則返回 "file" 如果 obj 是一個已關(guān)閉的文件句柄,則返回 "closed file" 如果 obj 不是一個文件句柄,則返回 nil。
把每一個參數(shù)的值寫入文件。參數(shù)必須為字符串或數(shù)字,若要輸出其它值,則需通過 tostring 或 string.format 進(jìn)行轉(zhuǎn)換。
相當(dāng)于 io.output():write。
設(shè)置和獲取當(dāng)前文件位置,成功則返回最終的文件位置(按字節(jié),相對于文件開頭),失敗則返回 nil 加錯誤信息。缺省時,whence 默認(rèn)為 "cur",offset 默認(rèn)為 0 。 參數(shù) whence:
whence | 含義 |
---|---|
"set" | 文件開始 |
"cur" | 文件當(dāng)前位置(默認(rèn)) |
"end" | 文件結(jié)束 |
設(shè)置輸出文件的緩沖模式。模式:
模式 | 含義 |
---|---|
"no" | 沒有緩沖,即直接輸出 |
"full" | 全緩沖,即當(dāng)緩沖滿后才進(jìn)行輸出操作(也可調(diào)用flush馬上輸出) |
"line" | 以行為單位,進(jìn)行輸出 |
最后兩種模式,size 可以指定緩沖的大?。ò醋止?jié)),忽略 size 將自動調(diào)整為最佳的大小。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: