Lua文件I/O
Lua 文件 I/O
Lua 的 IO 库用于读取或操作文件。Lua IO 库提供两类文件操作,它们分别是隐式文件描述符(implict file descriptors)和显式文件描述符(explicit file descriptors)。
在接下来的例子的,我们会用到一个示例文件 test.lua,文件内容如下:
1 | -- sample test.lua |
file = io.open (filename [, mode])
1 |
|
– 只读模式打开文件
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)
– 将内容追加到文件最后一行
io.write(“– End of the test.lua file”)
– 关闭打开的文件
io.close(file)
1 |
|
- Sample test.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
输出的内容是 test.lua 文件中的第一行。“-- End of the test.lua file” 他会被追加到 test.lua 文件的最后一行。
从上面的例子中,你可以看到隐式的描述述如何使用 io."x" 方法与文件系统交互。上面的例子使用 io.read() 函数时没有使用可选参数。此函数的可选参数包括:
<table>
<tr>
<th>模式</th>
<th>描述</th>
</tr>
<tr>
<td>"*n"</td>
<td>从文件当前位置读入一个数字,如果该位置不为数字则返回 nil。</td>
</tr>
<tr>
<td>"*a"</td>
<td>读入从当前文件指针位置开始的整个文件内容。</td>
</tr>
<tr>
<td>"*i"</td>
<td>读入当前行。</td>
</tr>
<tr>
<td>number</td>
<td>读入指定字节数的内容。</td>
</tr>
</table>
另外一些常用的方法:
<ul>
<li>io.tmpfile():返回一个可读写的临时文件,程序结束时该文件被自动删除。</li>
<li>io.type(file):检测输入参数是否为可用的文件句柄。返回 "file" 表示一个打开的句柄;“closed file” 表示已关闭的句柄;nil 表示不是文件句柄。</li>
<li>io.flush():清空输出缓冲区。</li>
<li>io.lines(optional file name): 返回一个通用循环迭代器以遍历文件,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil。若显示提供了文件句柄,则结束时自动关闭文件;使用默认文件时,结束时不会自动关闭文件。</li>
</ul>
## 显示文件描述符
我们也会经常用到显示文件描述符,因为它允许我们同时操作多个文件。这些函数与隐式文件描述符非常相似,只不过我们在这儿使用 file:function_name 而不是使用 io.function_name 而已。下面的例子使用显示文件描述符实现了与前面例子中完全相同的功能。
- 只读模式打开文件
file = io.open(“test.lua”, “r”)
- 只读模式打开文件
– 输出文件的第一行
print(file:read())
– 关闭打开的文件
file:close()
– 以追加模式打开文件
file = io.open(“test.lua”, “a”)
– 添加内容到文件的尾行
file:write(“–test”)
– 关闭打开的文件
file:close()
1 |
|
– Sample test.lua
1 |
|
– Opens a file in read
file = io.open(“test.lua”, “r”)
file:seek(“end”,-25)
print(file:read(“*a”))
– closes the opened file
file:close()
1 | 执行上的面的程序,你可以得到类似下面的输出结果: |
sample2 test.lua
–test
你还可以尝试不同的参数了解更多的 Lua 文件操作方法。