lua菜鳥教程 Lua 檔案 I O

2021-10-13 09:04:14 字數 3147 閱讀 6537

lua 檔案 i/o

lua i/o 庫用於讀取和處理檔案。分為簡單模式(和c一樣)、完全模式。

簡單模式(****** model)擁有乙個當前輸入檔案和乙個當前輸出檔案,並且提供針對這些檔案相關的操作。

完全模式(complete model) 使用外部的檔案控制代碼來實現。它以一種面對物件的形式,將所有的檔案操作定義為檔案控制代碼的方法

簡單模式在做一些簡單的檔案操作時較為合適。但是在進行一些高階的檔案操作的時候,簡單模式就顯得力不從心。例如同時讀取多個檔案這樣的操作,使用完全模式則較為合適。

開啟檔案操作語句如下:

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

mode 的值有:

模式描述

r以唯讀方式開啟檔案,該檔案必須存在。

w開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。

a以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(eof符保留)

r+以可讀寫方式開啟檔案,該檔案必須存在。

w+開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。

a+與a類似,但此檔案可讀可寫

b二進位制模式,如果檔案是二進位制檔案,可以加上b

+號表示對檔案既可以讀也可以寫

簡單模式

簡單模式使用標準的 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() 中我們沒有帶引數,引數可以是下表中的乙個:

模式描述

"*n"讀取乙個數字並返回它。例:file.read("*n")

"*a"從當前位置讀取整個檔案。例:file.read("*a")

number返回乙個指定字元個數的字串,或在 eof 時返回 nil。例:file.read(5)

其他的 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.ua 檔案的第一行資訊,並在該檔案最後一行新增了 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

Lua 筆記 Lua 檔案 I O

目錄 lua 檔案 i o 簡單模式 完全模式 簡單模式 model 擁有乙個當前輸入檔案和乙個當前輸出檔案,並且提供針對這些檔案相關的操作 完全模式 complete model 使用外部的檔案控制代碼來實現。它以一種面對物件的形式,將所有的檔案操作定義為檔案控制代碼的方法 開啟檔案操作語句如下 ...

lua菜鳥教程 Lua 模組與包

lua 模組與包 模組類似於乙個封裝庫,從 lua 5.1 開始,lua 加入了標準的模組管理機制,可以把一些公用的 放在乙個檔案裡,以 api 介面的形式在其他地方呼叫,有利於 的重用和降低 耦合度。lua 的模組是由變數 函式等已知元素組成的 table,因此建立乙個模組很簡單,就是建立乙個 t...

lua菜鳥教程 Lua入門學習筆記

最近在使用cocos2d x lua來開發遊戲。遊戲的主要邏輯將在lua裡寫,之前沒有接觸過lua,以下是我總結的入門筆記。運算子邏輯運算子 與 and 或 or 非 not 邏輯判斷只有在false和nil時為假,其餘均為真。or和and會返回第乙個斷路的值。lua中沒有c語言的三元符 x a b...