Lua 的 IO (输入/输出)模块 用于处理文件输入输出操作,主要通过 io 库实现。这个模块提供了简单而强大的文件操作功能,使得 Lua 能够高效地读写文件数据。
主要功能
1. 文件打开与关闭
io.open(filename [, mode]):以指定模式打开文件- 模式包括:"r" (读取)、"w" (写入)、"a" (追加)、"b" (二进制模式)
- 示例:
local file = io.open("test.txt", "r")
file:close():关闭已打开的文件- 示例:
file:close()
- 示例:
2. 文件读写操作
file:read(format):从文件中读取数据- 格式参数:"*n" (数字)、"*a" (全部内容)、"*l" (一行)、数字(指定字节数)
- 示例:
local line = file:read("*l")
file:write(value):向文件写入数据- 示例:
file:write("Hello Lua!\n")
- 示例:
3. 标准输入输出
io.read():从标准输入读取io.write():向标准输出写入io.input()/io.output():设置默认输入/输出文件
4. 文件定位
file:seek([whence][, offset]):移动文件指针- 位置参数:"set" (文件头)、"cur" (当前位置)、"end" (文件尾)
- 示例:
file:seek("end", -10)移动到文件倒数第10字节处
高级功能
1. 缓冲控制
file:flush():立即将缓冲区内容写入文件io.lines([filename]):返回文件行的迭代器
2. 临时文件处理
Lua 可以通过组合使用 os.tmpname() 和 io.open() 来创建和处理临时文件
3. 二进制文件操作
通过添加 "b" 模式标志来读写二进制文件
应用场景
- 配置文件读写:读取和写入程序配置文件
- 日志记录:将程序运行信息写入日志文件
- 数据处理:读取CSV或其他格式的数据文件
- 资源加载:加载游戏资源或脚本文件
示例代码
lua
-- 读取文件内容
local file = io.open("data.txt", "r")
if file then
local content = file:read("*a")
file:close()
print(content)
end
-- 写入文件
local out = io.open("output.txt", "w")
if out then
out:write("This is line 1\n")
out:write("This is line 2\n")
out:close()
end
-- 逐行处理文件
for line in io.lines("bigfile.txt") do
-- 处理每一行
print(#line) -- 打印每行长度
end
注意事项
- 文件操作后务必关闭文件,避免资源泄漏
- 在写入模式下打开已存在文件会清空原内容
- 检查文件打开是否成功(返回值是否为nil)
- 考虑文件路径在不同操作系统中的兼容性
- 处理大文件时要注意内存使用情况
Lua 的 IO 模块虽然简单,但功能齐全,足以满足大多数文件操作需求。对于更高级的文件系统操作,可以结合使用 os 模块提供的功能。