十六、企業快速開發平臺Spring Cloud+Spring Boot+Mybatis+ElementUI之Lua 檔案 I/O

JIAN2發表於2021-12-30

Lua 檔案 I/O

Lua I/O 庫用於讀取和處理檔案。分為簡單模式(和C一樣)、完全模式。

  • 簡單模式(simple model)擁有一個當前輸入檔案和一個當前輸出檔案,並且提供針對這些檔案相關的操作。
  • 完全模式(complete model) 使用外部的檔案控制程式碼來實現。它以一種面對物件的形式,將所有的檔案操作定義為檔案控制程式碼的方法

簡單模式在做一些簡單的檔案操作時較為合適。但是在進行一些高階的檔案操作的時候,簡單模式就顯得力不從心。例如同時讀取多個檔案這樣的操作,使用完全模式則較為合適。 需要框架原始碼的朋友可以看我個人簡介聯絡我。


十六、企業快速開發平臺Spring Cloud+Spring Boot+Mybatis+ElementUI之Lua 檔案 I/O

開啟檔案操作語句如下:

file = io.open (filename [, mode])

mode 的值有:


十六、企業快速開發平臺Spring Cloud+Spring Boot+Mybatis+ElementUI之Lua 檔案 I/O


簡單模式

簡單模式使用標準的 I/O 或使用一個當前輸入檔案和一個當前輸出檔案。

以下為 file.lua 檔案程式碼,操作的檔案為test.lua(如果沒有你需要建立該檔案),程式碼如下:

例項

-- 以只讀方式開啟檔案
file = io.open("test.lua", "r")
-- 設定預設輸入檔案為 test.lua
io.input(file)
-- 輸出檔案第一行
print(io.read())
-- 關閉開啟的檔案
io.close(file)
-- 以附加的方式開啟只寫檔案
file = io.open("test.lua", "a")
-- 設定預設輸出檔案為 test.lua
io.output(file)
-- 在檔案最後一行新增 Lua 註釋
io.write("--  test.lua 檔案末尾註釋")
-- 關閉開啟的檔案
io.close(file)

執行以上程式碼,你會發現,輸出了 test.lua 檔案的第一行資訊,並在該檔案最後一行新增了 lua 的註釋。如我這邊輸出的是:

-- test.lua 檔案

在以上例項中我們使用了 io."x" 方法,其中 io.read() 中我們沒有帶引數,引數可以是下表中的一個:


十六、企業快速開發平臺Spring Cloud+Spring Boot+Mybatis+ElementUI之Lua 檔案 I/O

其他的 io 方法有:

  • io.tmpfile():返回一個臨時檔案控制程式碼,該檔案以更新模式開啟,程式結束時自動刪除
  • io.type(file): 檢測obj是否一個可用的檔案控制程式碼
  • io.flush(): 向檔案寫入緩衝中的所有資料
  • io.lines(optional file name): 返回一個迭代函式,每次呼叫將獲得檔案中的一行內容,當到檔案尾時,將返回nil,但不關閉檔案

完全模式

通常我們需要在同一時間處理多個檔案。我們需要使用 file:function_name 來代替 io.function_name 方法。以下例項演示瞭如何同時處理同一個檔案:

例項

-- 以只讀方式開啟檔案
file = io.open("test.lua", "r")
-- 輸出檔案第一行
print(file:read())
-- 關閉開啟的檔案
file:close()
-- 以附加的方式開啟只寫檔案
file = io.open("test.lua", "a")
-- 在檔案最後一行新增 Lua 註釋
file:write("--test")
-- 關閉開啟的檔案
file:close()

執行以上程式碼,你會發現,輸出了 test.lua 檔案的第一行資訊,並在該檔案最後一行新增了 lua 的註釋。如我這邊輸出的是:

-- test.lua 檔案

read 的引數與簡單模式一致。

其他方法:

  • file:seek(optional whence, optional offset): 設定和獲取當前檔案位置,成功則返回最終的檔案位置(按位元組),失敗則返回nil加錯誤資訊。引數 whence 值可以是:
    • "set": 從檔案頭開始
    • "cur": 從當前位置開始[預設]
    • "end": 從檔案尾開始
    • offset:預設為0

不帶引數file:seek()則返回當前位置,file:seek("set")則定位到檔案頭,file:seek("end")則定位到檔案尾並返回檔案大小

  • file:flush(): 向檔案寫入緩衝中的所有資料
  • io.lines(optional file name): 開啟指定的檔案filename為讀模式並返回一個迭代函式,每次呼叫將獲得檔案中的一行內容,當到檔案尾時,將返回nil,並自動關閉檔案。
    若不帶引數時io.lines() <=> io.input():lines(); 讀取預設輸入裝置的內容,但結束時不關閉檔案,如:
    for line in io.lines("main.lua") do print(line)   end

以下例項使用了 seek 方法,定位到檔案倒數第 25 個位置並使用 read 方法的 *a 引數,即從當期位置(倒數第 25 個位置)讀取整個檔案。

例項

-- 以只讀方式開啟檔案
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- 關閉開啟的檔案
file:close()

我這邊輸出的結果是:

st.lua 檔案末尾--test


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2850083/,如需轉載,請註明出處,否則將追究法律責任。

相關文章