3.4 Lua代码中的文件操作
1.代开文件
io.open(filename, mode) 接口中的 filename 参数是需要打开文件的路径,mode 是需要打开文件模式,有如下几种模式:
---|> "r" # 只读模式。
---| "w" # 只写模式。
---| "a" # 追加模式。
---| "r+" # 更新模式,保留所有原有数据。
---| "w+" # 更新模式,清除所有原有数据。
---| "a+" # 追加更新模式,保留原有数据,只允许在文件末尾写入。
---| "rb" # 只读模式。(二进制模式)
---| "wb" # 只写模式。(二进制模式)
---| "ab" # 追加模式。(二进制模式)
---| "r+b" # 更新模式,保留所有原有数据。(二进制模式)
---| "w+b" # 更新模式,清除所有原有数据。(二进制模式)
---| "a+b" # 追加更新模式,保留原有数据,只允许在文件末尾写入。(二进制模式)
文件在打开成功后会返回文件的句柄
2.输入重定向
io.input(file) ,该接口是将打开的文件输入重定向,可以将读取文件中的数据,其中 file 为打开文件返回的句柄
3.输出重定向
io.output(file) 该接口是将打开的文件输出重定向,可以将数据写入到文件当前光标所在的位置,其中 file 为打开文件返回的句柄
4.读取文件数据
io.read(...) 该接口是读取文件中的数据,依据填入参数的不同读取的数据也不相同,输入参数类型如下:
---| "n" # 读取一个数字的字符并将其返回。
---| "a" # 读取整个文件。
---|> "l" # 读取下一行(跳过行尾符)。
---| "L" # 读取下一行(保留行尾符)。
5.写入数据到文件
io.write(...) 该接口是写入数据到文件中去,参数是需要写入的数据
6.关闭文件
io.close(file) 该接口是关闭文件的接口,填入的参数是需要关闭文件的句柄
fl=io.open("file/file.txt","r+");if fl==nil thenprint("读取文件失败");os.exit();
endio.input(fl);--将文件句柄加入到输入中print(io.read("a"));--读取一行io.write("asd");--这样会输出到控制台中,不会输入到文件中io.output(fl);--将文件句柄放到输出中,
io.write("1234567890");--输出数据到文件中
--print(io.read("l"));--读取不到数据,文件中的光标处于最后,没有任何数据
io.close();7. 设置光标的位置
file:seek(whence, offset) 该函数是设置光标所在的位置,基于 whence 的位置偏移 offset ;如果什么也不填会返回当前光标所在的位置
fl=io.open("file/file.txt","r+");if fl==nil thenprint("读取文件失败");os.exit();
endprint(fl:seek());
io.input(fl);--将文件句柄加入到输入中print(io.read(3));
print(fl:seek("cur",3));--将在当前光标的位置往后移动3个字符
print(io.read("l"));
io.close();8.文件自己操作自己
fl=io.open("file/file.txt","r+");if fl==nil thenprint("读取文件失败");os.exit();
endprint(fl:seek());--读取当前光标位置
io.input(fl);--将文件句柄加入到输入中print(io.read(3));--读取三个字节数据,光标后移3个字节
print(fl:seek("cur",3));--将在当前光标的位置往后移动3个字符
print(io.read("l"));--输出当前行,在当前光标后的数据
fl:seek("set",0);--设置光标到文件开头
fl:write("aa\n679");--往文件当前光标位置输入数据
fl:seek("set",0);
print(fl:read("a"));--输出文件的所有数据
fl:write("ooooooooooo\n777777777777777");--往文件当前光标位置输入数据
fl:seek("set",0);
print(fl:read("a"));--输出文件的所有数据
io.close();9.文件循环输出
fl=io.open("file/file.txt","r+");if fl==nil thenprint("读取文件失败");os.exit();
endio.input(fl);--将文件句柄加入到输入中for str in fl:lines() doprint(str);
end
print("")for str in io.lines("file/file.txt") doprint(str);
endio.close();