扫码一下
查看教程更方便
I/O 库用于在 Lua 中读取和操作文件。 Lua 中有两种文件操作,即隐式文件描述符和显式文件描述符。
对于以下示例,我们将使用示例文件 test.lua
,如下所示。
-- sample test.lua
-- sample2 test.lua
一个简单的文件打开操作使用以下语句。
file = io.open (filename [, mode])
下表列出了各种文件模式。
序号 | 模式 | 描述 |
---|---|---|
1 | r | 以只读方式打开文件,该文件必须存在。 |
2 | w | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
3 | a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) |
4 | r+ | 以可读写方式打开文件,该文件必须存在。 |
5 | w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
6 | a+ | 与a类似,但此文件可读可写 |
7 | b | 二进制模式,如果文件是二进制文件,可以加上b |
8 | + | 号表示对文件既可以读也可以写 |
隐式文件描述符使用标准输入/输出模式或使用单个输入和单个输出文件。 使用隐式文件描述符的示例如下所示。
-- 以只读方式打开文件
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 文件第一行的输出。 对于我们的程序,我们得到以下输出。
-- Sample test.lua
这是我们 test.lua 文件中语句的第一行。 此外,“-- test.lua 文件的结尾”行将附加到 test.lua 代码的最后一行。
在上面的示例中,我们可以看到隐式描述符如何使用 io."x" 方法与文件系统一起工作。 上面的示例使用 io.read()
没有可选参数。 可选参数可以是以下任何一种。
序号 | 模式 | 描述 |
---|---|---|
1 | "*n" | 读取一个数字并返回它。例:file.read("*n") |
2 | "*a" | 从当前位置读取整个文件。例:file.read("*a") |
3 | "*l"(默认) | 读取下一行,在文件尾 (EOF) 处返回 nil。例:file.read("*l") |
4 | number | 返回一个指定字符个数的字符串,或在 EOF 时返回 nil。例:file.read(5) |
其他常见的 I/O 方法包括:
我们经常使用显式文件描述符,它允许我们一次操作多个文件。 这些函数与隐式文件描述符非常相似。 在这里,我们使用 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()
运行程序时,我们将获得与隐式描述符示例类似的输出。
-- Sample test.lua
外部描述符的所有文件打开模式和读取参数与隐式文件描述符相同。
其他常见的文件方法包括
使用 seek 方法的示例如下所示。 它将光标从文件结尾之前的 25 个位置偏移。 读取函数从查找位置打印文件的其余部分。
-- 以只读方式打开文件
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- 关闭打开的文件
file:close()
我们将获得类似于以下内容的一些输出。
sample2 test.lua
--test