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