Lua 文件 I/O

Lua I/O 库用于读取和处理文件。分为简单模式(和C一样)、完全模式。

  • 简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。
  • 完全模式(complete model) 使用外部的文件句柄来实现。它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法

简单模式在做一些简单的文件操作时较为合适。但是在进行一些高级的文件操作的时候,简单模式就显得力不从心。例如同时读取多个文件这样的操作,使用完全模式则较为合适。

打开文件操作语句如下:

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

mode 的值有:


简单模式

简单模式使用标准的 I/O 或使用一个当前输入文件和一个当前输出文件。

以下为 file.lua 文件代码,操作的文件为test.lua(如果没有你需要创建该文件),代码如下:

实例

-- 以只读方式打开文件
file = io.open("test.lua", "r")-- 设置默认输入文件为 test.lua
io.input(file)-- 输出文件第一行
print(io.read())-- 关闭打开的文件
io.close(file)-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")-- 设置默认输出文件为 test.lua
io.output(file)-- 在文件最后一行添加 Lua 注释
io.write("--  test.lua 文件末尾注释")-- 关闭打开的文件
io.close(file)

执行以上代码,你会发现,输出了 test.lua 文件的第一行信息,并在该文件最后一行添加了 lua 的注释。如我这边输出的是:

-- test.lua 文件

在以上实例中我们使用了 io."x" 方法,其中 io.read() 中我们没有带参数,参数可以是下表中的一个:

其他的 io 方法有:

  • io.tmpfile():返回一个临时文件句柄,该文件以更新模式打开,程序结束时自动删除

  • io.type(file): 检测obj是否一个可用的文件句柄

  • io.flush(): 向文件写入缓冲中的所有数据

  • io.lines(optional file name): 返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,但不关闭文件


完全模式

通常我们需要在同一时间处理多个文件。我们需要使用 file:function_name 来代替 io.function_name 方法。以下实例演示了如何同时处理同一个文件:

实例

-- 以只读方式打开文件
file = io.open("test.lua", "r")-- 输出文件第一行
print(file:read())-- 关闭打开的文件
file:close()-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")-- 在文件最后一行添加 Lua 注释
file:write("--test")-- 关闭打开的文件
file:close()

执行以上代码,你会发现,输出了 test.lua 文件的第一行信息,并在该文件最后一行添加了 lua 的注释。如我这边输出的是:

-- test.lua 文件

read 的参数与简单模式一致。

其他方法:

  • file:seek(optional whence, optional offset): 设置和获取当前文件位置,成功则返回最终的文件位置(按字节),失败则返回nil加错误信息。参数 whence 值可以是:

    • "set": 从文件头开始
    • "cur": 从当前位置开始[默认]
    • "end": 从文件尾开始
    • offset:默认为0

    不带参数file:seek()则返回当前位置,file:seek("set")则定位到文件头,file:seek("end")则定位到文件尾并返回文件大小

  • file:flush(): 向文件写入缓冲中的所有数据

  • io.lines(optional file name): 打开指定的文件filename为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件。
    若不带参数时io.lines() <=> io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件,如:

    for line in io.lines("main.lua") doprint(line)end

以下实例使用了 seek 方法,定位到文件倒数第 25 个位置并使用 read 方法的 *a 参数,即从当期位置(倒数第 25 个位置)读取整个文件。

实例

-- 以只读方式打开文件
file = io.open("test.lua", "r")file:seek("end",-25)
print(file:read("*a"))-- 关闭打开的文件
file:close()

我这边输出的结果是:

st.lua 文件末尾--test

十六、Lua 文件 I/O的学习相关推荐

  1. 敏捷开发一千零一问系列之十六:如何让开发人员学习产品?

    这是敏捷开发一千零一问系列的第十六篇.(在这里提问,之一,之二,之三,问题总目录) 这个和上一篇"敏捷开发与CMMI谁为主"都是最近一次培训被大家选出来的最有价值问题. 问题 开发 ...

  2. Struts2学习笔记(十六) 文件上传(File Upload)

    使用jsp/Servlet实现文件上传 在我们的web应用中,文件上传是一项非常常见的功能.以前我学习php的时候也用php写过文件上传,不过php中实现起来比较方便,只需要从全局变量$_FILES中 ...

  3. Lua(十六)——文件

    一:文件中的输入与输出 读取一个文件,变量赋值等都是输入(input) 将一个文件的内容写到另一个文件中,就是输出(output) 二:文件读取模式介绍 r:只读方式打开文件,该文件必须存在 w:只写 ...

  4. 【软件开发底层知识修炼】二十六 ABI-应用程序二进制接口 学习总结文章目录

    前面学习了ABI的知识,感觉受益良多.对底层与编译器有更加深刻的认识,为此这里将前面写过的关于ABI 的文章给列出来,方便学习与翻阅. [软件开发底层知识修炼]二十一 ABI-应用程序二进制接口一 [ ...

  5. (十六)从零开始学人工智能-深度学习基础3

    文章目录 一.生成对抗网络基础 1.1 GANGANGAN概述 1.2 什么是生成对抗网络? 1.2.1 对抗生成网络背后的数学原理 1.2.2 重说GAN原理 1.2.3 小结 1.3 GANs应用 ...

  6. Python基础语法笔记(十六)文件与文件系统

    Reference https://github.com/datawhalechina/team-learning-program/blob/master/PythonLanguage 1. 文件与文 ...

  7. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  8. 【维生素C语言】第十六章 - 文件操作(下)

    人类高质量文件操作教学(下)[C语言] 前言: 在文件操作(上)中,我们讲了文件的打开和关闭和文件的顺序读写,还有对流(stream)进行一个简单的讲解.本章将对文件的随机读写.文本文件和二进制文件. ...

  9. RocketMQ源码(十六)之文件清理

    文章目录 简介 源码分析 CommitLog清理 ConsumeQueue和Index清理 简介 Broker文件清理主要清理CommitLog.ConsumeQueue.IndexFile Comm ...

最新文章

  1. ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))...
  2. VTK:图片之ImageAnisotropicDiffusion2D
  3. 从C10K到C10M高性能网络的探索与实践
  4. stm32的afio初始化代码_STM32-IO-AFIO(复用功能IO和调试配置)
  5. 在vimrc中设置record
  6. CV Code | 计算机视觉开源周报 20190604期
  7. 看门狗(APB watchdog)简介,各个寄存器简介,把看门狗挂到APB总线上,看门狗的验证测试(1)
  8. MODULE_DEVICE_TABLE【转】
  9. [HDOJ5734]Acperience(数学,公式推导)
  10. 计算机设备安全隐患排查,安全安全隐患排查实施方案
  11. win7共享文件服务器设置密码,Win7局域网共享文件夹添加密码保护文件安全的方法...
  12. igraph入门教程
  13. php 公众号 模板消息id如何获取_微信公众号后台模板消息如何实现发送的功能...
  14. SpringBoot接口数据加解密实战
  15. 基于微信视频分享平台小程序设计与实现 开题报告
  16. 五面拿下阿里飞猪offer,java图形界面设置背景颜色
  17. i春秋之SQL(详细WP)
  18. java特种兵 怎么样_第1篇 Java功底篇免费阅读_Java特种兵(上册)免费全文_百度阅读...
  19. [趣味分享]纯手工机械的无碳小车
  20. 直播系统开发,一对一直播源码开发

热门文章

  1. 阻塞队列和线程池原理
  2. 远望资本程浩:做 To B,一定要避免 9 类错误!
  3. MySQL数据库规范
  4. 爱玛“2022追星计划”打造摩登复古风,再掀电动车潮流革命
  5. 精彩的人生不必苛求完美
  6. 图像中噪声的总结学习
  7. java build path -- source folders on build path
  8. 11.购物车、SpringTask
  9. java迭代器遍历中删除对象
  10. iOS 设计圆形头像