一、Lua文件I/O
- Lua读取和处理文件分为:简单模式和完全模式。
- 简单模式:仅指针一个输入文件和一个输出文件进行操作。
- 完全模式:可以同时处理多个文件。
- 打开文件:
- file = io.open(filename [, mode])
- 参数mode说明:
- 'r' : 以只读方式打开文件,文件不存在时返回nil。
- 'r+' : 以读写方式打开文件,文件不存在时返回nil。
- 'w' : 以只写方式打开文件,文件不存在时创建文件,文件存在时将文件内容清空。
- 'w+' : 以读写方式打开文件,文件不存在时创建文件,文件存在时将文件内容清空。
- 'a' : 以只写方式打开文件,文件不存在时创建文件,文件存在时在文件末尾追加写入的内容。
- 'a+' : 以读写方式打开文件,文件不存在时创建文件,文件存在时在文件末尾追加写入的内容。
- 返回值file:文件句柄。
- 关闭文件:
- io.close(file) --关闭已打开的文件句柄。
- 简单模式:
- 处理流程:
- file = io.open('./file.test', 'w+') --打开文件
- io.input(file) --设置输入文件。
- io.output(file) --设置输出文件。
- io.write('hello lua file.') --向文件./file.test写入数据。
- io.flush() --刷新缓冲区中的数据到文件中。
- io.seek('set') --将文件指针定位到文件开头。
- io.read() --读取文件./file.test的一行内容,具体内容为:hello lua file.。
- io.close() --关闭文件。
- io方法介绍:
- io.read():
- 功能:读取输入文件中的内容。
- 参数说明:
- '*n' : 如果当前文件指针的位置是一个数字,读取并返回这个数字;否则返回nil。
- '*a' : 从当前文件指针位置读取整个文件。
- '*l' : 读取下一行内容,默认方式。在文件结尾处,返回nil。
- number : 读取指定字符个数的字符串。在文件结尾处,返回nil。
- io.tempfile()
- 功能:以更新模式打开一个临时文件,程序结束时,文件句柄自动删除。
- io.type(file)
- 功能:检测输入参数是否为一个文件句柄;是,返回file;不是,返回nil。
- io.flush()
- 功能:将缓冲中的所有数据写入文件。
- io.lines(optional file name)
- 功能:
- 返回一个迭代函数;
- 每次调用返回文件中的一行内容,到达文件结尾时返回nil。
- 文件不会自动关闭;
- 完全模式:
- 处理流程:
- file = io.open('./file.test', 'w+') --打开文件
- file:write('hello lua123 file.') --通过文件句柄向文件./file.test写入数据。
- file:flush() --通过文件句柄调用刷新缓冲区的函数。
- file:seek('set', 9) --将文件指针定位到数字5。
- file:read('*n') --读取当前文件指针处的数字:123。
- file:close() --关闭文件。
- io方法介绍:
- file:read(): 同io.read()。
- file:seek(whence, offset):
- 功能:设置和读取当前文件位置。
- 返回值:成功时,返回文件位置;失败时,返回nil和错误信息。
- whence参数:
- 'set' : 文件开头。
- 'end' : 文件当前位置(默认值)。
- 'end' : 文件结尾。
- offset参数:默认值为0。
- file:flush(): 同io.flush()。
- io.line(optional file name):
- 功能:
- 以读模式打开指定的文件,返回一个迭代函数;
- 每次调用迭代函数时,返回一行的内容;到达文件结尾时,返回nil。
- 文件自动关闭;
- 不指定文件时,io.lines()等同于io.input():lines(),读取默认输入文件的内容,且结束时文件不会自动关闭。
- 示例:
- for line in io.lines('./file.test') do
- print(line)
- end
- 结果:依次输出文件./file.test中的每一行内容。