Lua - 文件I/O

Lua - 文件I/O 首页 / Lua入门教程 / Lua - 文件I/O

I/O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式(Implicit)和显式(Explicit)操作。

对于以下示例,无涯教程将使用例文件test.lua,如下所示。

-- sample test.lua
-- sample2 test.lua

一个简单的文件打开操作使用以下语句。

file=io.open (filename [, mode])

下表列出了各种文件模式。

Sr.No.Mode & Remark
1

" r"

只读模式,是打开现有文件的默认模式。

链接:https://www.learnfk.comhttps://www.learnfk.com/lua/lua-file-io.html

来源:LearnFk无涯教程网

2

" w"

启用写模式,该模式将覆盖现有文件或创建新文件。

3

" a"

追加模式,用于打开现有文件或创建要追加的新文件。

4

" r +"

现有文件的读写模式。

5

" w +"

如果文件存在或具有读写权限的新文件被删除,则所有现有数据都将被删除。

6

" a +"

启用了读取模式的追加模式可以打开现有文件或创建新文件。

隐式操作

隐式(Implicit)文件描述符使用标准输入/输出模式,或使用单个输入和单个输出文件。下面显示了使用隐式文件描述符的示例。

-- 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。上面的示例使用不带可选参数的io.read()。可选参数可以是以下任意一个。

Sr.No.Mode & Remark
1

" * n"

从当前文件位置读取并返回一个数字(如果文件位置存在)或返回nil。

2

" * a"

从当前文件位置返回文件的所有内容。

3

" * l"

从当前文件位置读取该行,并将文件位置移至下一行。

4

number

读取函数中指定的字节数。

其他常见的I/O方法包括

  • io.tmpfile()                              - 返回用于读取和写入的临时文件,一旦程序退出,该文件将被删除。

  • io.type(file)                              - 根据输入文件返回file,close file还是nil。

  • io.flush()                                   -  清除默认输出缓冲区。

  • io.lines(optional file name)  - 提供通用的 for 循环迭代器,循环遍历文件并最终关闭文件,以防万一在循环末尾提供了文件名未关闭该文件。

显式操作

无涯教程经常使用显式(Explicit)文件描述符,该描述符允许一次处理多个文件。这些函数与隐式文件描述符非常相似。在这里使用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()

运行程序时,您将得到与隐式描述符示例类似的输出。

-- Sample test.lua

外部描述符的所有文件打开模式和参数读取方式与隐式文件描述符相同。

其他常见的文件方法包括

  • file:seek(optional whence,optional offset)     -   whence参数为" set"," cur"或" end"。从文件开头设置具有更新文件位置的新文件指针。该函数的偏移量从零开始。如果第一个参数为" set",则从文件开头开始偏移;如果它是" cur";或从文件末尾开始(如果是" end")。默认参数值为" cur"和0,因此可以通过不带参数调用此函数来获取当前文件位置。

  • file:flush()                                                                   -   清除默认输出缓冲区。

  • io.lines(optional file name)                                     -   提供 for 循环迭代器,循环遍历文件并最终关闭文件,以防万一在循环末尾提供了文件名未关闭该文件。

下面显示了使用seek方法的示例。它使光标从文件结尾之前的25个位置偏移。读取函数从搜索位置打印文件的其余部分。

-- 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文件操作的全部函数。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

算法面试通关40讲 -〔覃超〕

Java性能调优实战 -〔刘超〕

TypeScript开发实战 -〔梁宵〕

分布式数据库30讲 -〔王磊〕

零基础实战机器学习 -〔黄佳〕

快手 · 音视频技术入门课 -〔刘歧〕

运维监控系统实战笔记 -〔秦晓辉〕

AI大模型系统实战 -〔Tyler〕

互联网人的数字化企业生存指南 -〔沈欣〕

好记忆不如烂笔头。留下您的足迹吧 :)