Lua 接口说明书 · 996引擎LUA API REFERENCE · 5.1/5.3

输入输出

IO

文件读写:打开关闭、按行读取、定位与缓冲 | 本页 20 个接口。登录全站学员账号后:给函数打 ✓ 记录学习进度、写私人备注。

io.close ([file])
📖 用途

关闭文件(省略参数关闭默认输出文件)。文件用完必须关闭,否则可能丢缓冲数据。

📥 参数
参数说明
file文件句柄,省略为默认输出
📤 返回值

成功 true;失败 nil+错误

💻 用法案例
local f = io.open('a.txt', 'w')
f:write('数据')
io.close(f)
io.flush ()
📖 用途

把默认输出文件的所有缓冲数据立刻写入磁盘。

📥 参数

无参数

📤 返回值

成功 true

💻 用法案例
io.write('重要数据')
io.flush()
io.input ([file])
📖 用途

设置/获取默认输入文件。传文件名打开它,传句柄切换到它;无参返回当前句柄。io.read 从这里读。

📥 参数
参数说明
file文件名 或 句柄,省略为查询
📤 返回值

当前输入句柄

💻 用法案例
io.input('in.txt')
print(io.read('*l'))   -- 读一行
io.lines (filename [, ...])
📖 用途

按行迭代文件内容(迭代器读完自动关闭文件)。逐行处理文本最简洁的写法。

📥 参数
参数说明
filename文件名,省略为默认输入
...读取格式,同 io.read
📤 返回值

迭代函数

💻 用法案例
for line in io.lines('log.txt') do
    if line:find('ERROR') then print(line) end
end
io.open (filename [, mode])
📖 用途

打开文件返回句柄。mode:"r"读(默认)/"w"写(清空)/"a"追加;带 + 可读写;加 b 二进制。失败返回 nil+错误。996 服务端 io 路径被沙箱限制在 Envir\ 内。

📥 参数
参数说明
filename文件路径
mode打开模式 r/w/a (+b)
📤 返回值

文件句柄;失败 nil, err

💻 用法案例
local f = assert(io.open('log.txt', 'a'))
f:write('新记录\n')
f:close()

local g, err = io.open('不存在.txt', 'r')
print(g, err)   --> nil  无法打开...
说明:996 服务端沙箱:只能打开 Envir\ 目录内的文件,越界报 I/O error 105。
io.output ([file])
📖 用途

设置/获取默认输出文件(io.write 写到这里)。用法同 io.input。

📥 参数
参数说明
file文件名 或 句柄,省略为查询
📤 返回值

当前输出句柄

💻 用法案例
io.output('out.txt')
io.write('写入内容')
io.output():close()
io.popen (prog [, mode])
📖 用途

执行外部程序并返回其输入输出句柄(很多受限环境禁用此函数)。

📥 参数
参数说明
prog命令行
mode"r" 读输出(默认) / "w" 写输入
📤 返回值

文件句柄

💻 用法案例
local f = io.popen('dir')
print(f:read('*a'))
f:close()
说明:996 服务端通常禁用;游戏脚本不要依赖它。
io.read (...)
📖 用途

从默认输入读取。格式:"*l" 一行(默认)/"*n" 一个数字/"*a" 全部;数字 n 读取 n 个字符。控制台交互用。

📥 参数
参数说明
...读取格式串
📤 返回值

读到的内容

💻 用法案例
local line = io.read('*l')      -- 读一行
local num = io.read('*n')        -- 读一个数字
io.stderr
📖 用途

标准错误输出的文件句柄(常量)。写入的内容用于报错通道。

📥 参数

无参数

📤 返回值

(句柄常量)

💻 用法案例
io.stderr:write('警告信息\n')
io.stdin
📖 用途

标准输入句柄(常量)。

📥 参数

无参数

📤 返回值

(句柄常量)

💻 用法案例
local line = io.stdin:read('*l')
io.stdout
📖 用途

标准输出句柄(常量)。print 底层就是写到这里。

📥 参数

无参数

📤 返回值

(句柄常量)

💻 用法案例
io.stdout:write('直接输出\n')
io.tmpfile ()
📖 用途

打开一个临时文件(可读写),程序结束或关闭后自动删除。

📥 参数

无参数

📤 返回值

文件句柄

💻 用法案例
local f = io.tmpfile()
f:write('临时数据')
f:seek('set')
print(f:read('*a'))
io.type (obj)
📖 用途

判断 obj 是否文件句柄:是则返回 "file"(打开)/ "closed file"(已关闭);不是返回 nil。(type() 对句柄只会说 userdata)

📥 参数
参数说明
obj任意值
📤 返回值

"file" / "closed file" / nil

💻 用法案例
local f = io.open('a.txt')
print(io.type(f))     --> file
f:close()
print(io.type(f))     --> closed file
print(type(f))        --> userdata
file:close ()
📖 用途

关闭文件句柄,释放系统资源并刷掉缓冲。关闭后句柄不可再读写(io.type 变 "closed file")。

📥 参数

无参数

📤 返回值

成功 true

💻 用法案例
local f = io.open('a.txt', 'r')
local data = f:read('*a')
f:close()
file:flush ()
📖 用途

立刻把该文件缓冲区里的数据写盘。重要数据写完马上 flush,防止断电/崩溃丢失。

📥 参数

无参数

📤 返回值

成功 true

💻 用法案例
f:write('关键日志')
f:flush()
file:lines ([...])
📖 用途

与 io.lines 相同,但作用于该句柄;迭代结束不会自动关闭文件(io.lines 会)。

📥 参数
参数说明
...读取格式串
📤 返回值

迭代函数

💻 用法案例
local f = io.open('log.txt')
for line in f:lines() do print(line) end
f:close()
file:read (...)
📖 用途

按格式从该文件读数据:"*a" 读完整个文件 / "*l" 一行(去掉换行) / "*n" 读一个数字 / 数字n 读 n 字节。到文件尾返回 nil(*a 返回空串)。

📥 参数
参数说明
...格式串,多个则依次读取
📤 返回值

读取的内容

💻 用法案例
local f = io.open('cfg.txt')
local all = f:read('*a')      -- 一次读完
f:close()
file:seek ([whence [, offset]])
📖 用途

移动/查询文件位置。whence:"set" 文件头 / "cur" 当前 / "end" 文件尾。offset 相对偏移。省略参数即查询当前位置。文件大小 = seek("end")。

📥 参数
参数说明
whence基准位置 set/cur/end,默认 cur
offset偏移字节,默认 0
📤 返回值

新的位置(相对文件头的字节偏移)

💻 用法案例
local f = io.open('big.txt')
print(f:seek('end'))   --> 文件大小(字节)
f:seek('set', 0)       -- 回到开头
f:close()
file:setvbuf (mode [, size])
📖 用途

设置缓冲模式:"no" 不缓冲(每个写操作立即生效) / "full" 满 size 才刷 / "line" 按行刷。

📥 参数
参数说明
modeno/full/line
size缓冲区字节数
📤 返回值

成功 true

💻 用法案例
f:setvbuf('no')   -- 关闭缓冲, 写入立即生效
file:write (...)
📖 用途

把所有参数(字符串或数字)按顺序写入该文件。数字不会自动加空格。写入位置由 file:seek 决定。

📥 参数
参数说明
...字符串或数字
📤 返回值

该文件句柄(可链式调用)

💻 用法案例
local f = io.open('a.txt', 'w')
f:write('等级=', 35, '\n')
f:write('金币=', 1000, '\n')
f:close()
Lua 接口说明书 · 996引擎教学资料 · chuan2.cn · 共 136 个接口
📝 我的备注-
👤 学员中心 · 备注与学习进度