一、Lua文件I/O

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