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