Lua中I/O庫用于讀取和處理文件。有兩種類型的文件操作,在Lua即隱含文件的描述符和明確的文件描述符。
對于下面的例子中,我們將使用一個示例文件test.lua,如下圖所示。
-- sample test.lua -- sample2 test.lua
一個簡單的文件打開操作使用下面的語句。
file = io.open (filename [, mode])
各種文件模式列示于下表中。
Mode | 描述 |
---|---|
"r" | 只讀模式,就是打開一個現(xiàn)有的文件的默認模式。 |
"w" | 寫使能模式將覆蓋現(xiàn)有的文件或創(chuàng)建一個新文件。 |
"a" | 追加打開一個現(xiàn)有的文件或進行追加創(chuàng)建一個新的文件模式。 |
"r+" | 讀寫方式為現(xiàn)有的文件。 |
"w+" | 如果文件存在的或新的文件讀取與寫入權限創(chuàng)建的所有現(xiàn)有數(shù)據(jù)將被刪除。 |
"a+" | 讀模式追加模式下啟用,打開一個現(xiàn)有的文件或創(chuàng)建一個新文件。 |
隱文件描述符使用標準輸入/輸出模式,或使用單輸入單輸出文件。使用隱式文件的描述符的一個示例如下所示。
-- Opens a file in read file = io.open("test.lua", "r") -- sets the default input file as test.lua io.input(file) -- prints the first line of the file print(io.read()) -- closes the open file io.close(file) -- Opens a file in append mode file = io.open("test.lua", "a") -- sets the default output file as test.lua io.output(file) -- appends a word test to the last line of the file io.write("-- End of the test.lua file") -- closes the open file io.close(file)
當運行程序,會得到test.lua文件的第一行輸出。這里例子中得到了下面的輸出。
-- Sample test.lua
這是聲明 test.lua 文件的第一行。“-- End of the test.lua file” 將被追加到test.lua代碼的最后一行
在上面的例子中可以看到隱描述與使用文件系統(tǒng)io.“×”方法是如何工作的。上面的例子使用io.read()沒有可選參數(shù)??蛇x參數(shù)可以是以下任意一個。
Mode | 描述 |
---|---|
"*n" | 讀取當前文件的位置,如果存在于文件的位置返回一個數(shù)字,或返回nil。 |
"*a" | 返回文件的所有從當前文件位置的內容。 |
"*l" | 讀取當前文件位置的對應行,并且移動文件位置下一行。 |
number | 讀函數(shù)中指定的字節(jié)數(shù)。 |
其他常見的IO方法包括:
io.tmpfile(): 返回讀寫臨時文件,一旦程序退出,文件將被刪除。
io.type(file): 返回文件,關閉文件或零根據(jù)所輸入的文件。
io.flush(): 清除默認輸出緩沖器。
io.lines(optional file name): 提供了一個通用的循環(huán)迭代器遍歷文件并關閉在最后的情況下提供文件名和默認文件的文件被使用,在循環(huán)的末尾沒有關閉。
我們經(jīng)常使用明確的文件描述符,使我們能夠在同一時間處理多個文件。這些功能都相當相似的隱式文件描述符。在這里,我們使用的文件:函數(shù)名,而不是io.function_name。同樣地隱文件描述符例的文件版本,以下示例如下所示。
-- Opens a file in read mode file = io.open("test.lua", "r") -- prints the first line of the file print(file:read()) -- closes the opened file file:close() -- Opens a file in append mode file = io.open("test.lua", "a") -- appends a word test to the last line of the file file:write("--test") -- closes the open file file:close()
當運行程序,會得到的隱含描述的例子是類似的輸出。
-- Sample test.lua
文件打開和參數(shù)進行讀取外部描述的所有的模式是一樣的隱含文件的描述符。
其他常見的文件的方法包括:
file:seek(optional whence, optional offset): 參數(shù)"set", "cur" 或 "end"。設置新的文件指針從文件的開始更新的文件的位置。偏移量是零基礎的這個功能。從如果第一個參數(shù)是“set”該文件的開始時所測的偏移量;從如果它是“cur” 文件中的當前位置;或從該文件的結束,如果是“end”。默認參數(shù)值是“cur”和0,因此當前的文件位置可以通過調用不帶參數(shù)這個函數(shù)來獲得。
file:flush(): 清除默認輸出緩沖器。
io.lines(optional file name): 提供了一個通用的循環(huán)迭代器遍歷文件并關閉在最后的情況下提供文件名和默認文件的文件被使用,在循環(huán)的末尾沒有關閉。
一個例子,以使用尋求方法如下所示。offsets從25個位置的光標之前的文件的末尾。從文件的讀出功能的打印剩余 seek 位置。
-- Opens a file in read file = io.open("test.lua", "r") file:seek("end",-25) print(file:read("*a")) -- closes the opened file file:close()
會得到類似下面的一些輸出。
sample2 test.lua --test
可以使用各種不同的模式和參數(shù)了解 Lua文件操作能力。