I/O库用于读取和操作Lua中的文件. Lua中有两种文件操作,即隐式文件描述符和显式文件描述符.
对于以下示例,我们将使用示例文件test.lua,如下所示.
-- sample test.lua -- sample2 test.lua
一个简单的文件打开操作使用以下语句.
file = io.open (filename [, mode])
下表列出了各种文件模式.
Sr.No. | 模式&说明 |
---|---|
1 | "r" 只读模式,是打开现有文件的默认模式. |
2 | "w" 写入启用模式,覆盖现有文件或创建新文件. |
3 | "a" 追加模式,用于打开现有文件或创建附加新文件. |
4 | "r+" 现有文件的读写模式. |
5 | "w+" 如果文件存在或创建具有读写权限的新文件,则删除所有现有数据. |
6 | "a+" 具有读取模式的追加模式已启用,可打开现有文件或创建一个新文件. |
隐式文件描述符使用标准输入/输出模式或使用单个输入和单个输出文件.使用隐式文件描述符的示例如下所示.
-- Opens a file in read file = io.open("test.lua", "r") -- sets the default input file as test.lua io.input(file) -- prints the first line of the file print(io.read()) -- closes the open file io.close(file) -- Opens a file in append mode file = io.open("test.lua", "a") -- sets the default output file as test.lua io.output(file) -- appends a word test to the last line of the file io.write("-- End of the test.lua file") -- closes the open file io.close(file)
当你运行程序时,你会得到一个输出test.lua文件的第一行.对于我们的程序,我们得到以下输出.
-- Sample test.lua
这是test.lua文件中声明的第一行.另外," - test.lua文件的结尾"行将附加到test.lua代码的最后一行.
在上面的例子中,你可以看到隐含的内容描述符使用io."x"方法处理文件系统.上面的示例使用不带可选参数的io.read().可选参数可以是以下任何一个.
Sr.No. | 模式&说明 |
---|---|
1 | "* n" 从当前文件位置读取并返回一个数字(如果存在于文件位置或返回nil.) |
2 | "* a" 从当前文件位置返回文件的所有内容. |
3 | "* l" 从中读取行当前文件位置,并将文件位置移动到下一行. |
4 | number 读取函数中指定的字节数. |
其他常见的I/O方法包括,
io.tmpfile() : 返回一个临时文件,用于读取和写入,一旦程序退出,将删除.
io.type(file) : 根据输入文件返回文件,关闭文件或nil.
io.flush() : 清除默认输出缓冲区.
io.lines(可选文件名) : 提供通用 for 循环迭代器,循环遍历文件并最终关闭文件,以防提供文件名或使用默认文件而不在循环结束时关闭./p>
我们经常使用显式文件描述符,它允许我们操作多个文件一时间这些函数与隐式文件描述符非常相似.在这里,我们使用file:function_name而不是io.function_name.下面显示了相同隐式文件描述符示例的文件版本的以下示例.
-- Opens a file in read mode file = io.open("test.lua", "r") -- prints the first line of the file print(file:read()) -- closes the opened file file:close() -- Opens a file in append mode file = io.open("test.lua", "a") -- appends a word test to the last line of the file file:write("--test") -- closes the open file file:close()
运行程序时,您将获得与隐式描述符示例类似的输出./p>
-- Sample test.lua
所有文件打开模式用于读取外部描述符的params与隐式文件描述符相同.
其他常用文件方法包括,
file:seek(optional,optional offset) : 参数是"set","cur"或"end".使用文件开头的更新文件位置设置新文件指针.在此函数中,偏移量从零开始.如果第一个参数是"set",则从文件的开头开始测量偏移量;从文件中的当前位置开始,如果它是"cur";或者从文件的末尾开始,如果它是"结束".默认参数值为"cur"和0,因此可以通过不带参数调用此函数来获取当前文件位置.
文件:flush () : 清除默认输出缓冲区.
io.lines(optional file name) : 提供通用 for 循环迭代器,循环遍历文件并最终关闭文件,以防提供文件名或使用默认文件而不在循环结束时关闭./p>
使用搜索方法的示例如下所示.它将光标从文件结束前的25个位置偏移. read函数从搜索位置打印文件的剩余部分.
-- 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()
您将获得类似于以下内容的输出.
sample2 test.lua --test
你可以玩耍所有不同的模式和参数,以了解Lua文件操作的完整能力.