十六、Lua 文件 I/O的学习
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的学习相关推荐
- 敏捷开发一千零一问系列之十六:如何让开发人员学习产品?
这是敏捷开发一千零一问系列的第十六篇.(在这里提问,之一,之二,之三,问题总目录) 这个和上一篇"敏捷开发与CMMI谁为主"都是最近一次培训被大家选出来的最有价值问题. 问题 开发 ...
- Struts2学习笔记(十六) 文件上传(File Upload)
使用jsp/Servlet实现文件上传 在我们的web应用中,文件上传是一项非常常见的功能.以前我学习php的时候也用php写过文件上传,不过php中实现起来比较方便,只需要从全局变量$_FILES中 ...
- Lua(十六)——文件
一:文件中的输入与输出 读取一个文件,变量赋值等都是输入(input) 将一个文件的内容写到另一个文件中,就是输出(output) 二:文件读取模式介绍 r:只读方式打开文件,该文件必须存在 w:只写 ...
- 【软件开发底层知识修炼】二十六 ABI-应用程序二进制接口 学习总结文章目录
前面学习了ABI的知识,感觉受益良多.对底层与编译器有更加深刻的认识,为此这里将前面写过的关于ABI 的文章给列出来,方便学习与翻阅. [软件开发底层知识修炼]二十一 ABI-应用程序二进制接口一 [ ...
- (十六)从零开始学人工智能-深度学习基础3
文章目录 一.生成对抗网络基础 1.1 GANGANGAN概述 1.2 什么是生成对抗网络? 1.2.1 对抗生成网络背后的数学原理 1.2.2 重说GAN原理 1.2.3 小结 1.3 GANs应用 ...
- Python基础语法笔记(十六)文件与文件系统
Reference https://github.com/datawhalechina/team-learning-program/blob/master/PythonLanguage 1. 文件与文 ...
- [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- 【维生素C语言】第十六章 - 文件操作(下)
人类高质量文件操作教学(下)[C语言] 前言: 在文件操作(上)中,我们讲了文件的打开和关闭和文件的顺序读写,还有对流(stream)进行一个简单的讲解.本章将对文件的随机读写.文本文件和二进制文件. ...
- RocketMQ源码(十六)之文件清理
文章目录 简介 源码分析 CommitLog清理 ConsumeQueue和Index清理 简介 Broker文件清理主要清理CommitLog.ConsumeQueue.IndexFile Comm ...
最新文章
- ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))...
- VTK:图片之ImageAnisotropicDiffusion2D
- 从C10K到C10M高性能网络的探索与实践
- stm32的afio初始化代码_STM32-IO-AFIO(复用功能IO和调试配置)
- 在vimrc中设置record
- CV Code | 计算机视觉开源周报 20190604期
- 看门狗(APB watchdog)简介,各个寄存器简介,把看门狗挂到APB总线上,看门狗的验证测试(1)
- MODULE_DEVICE_TABLE【转】
- [HDOJ5734]Acperience(数学,公式推导)
- 计算机设备安全隐患排查,安全安全隐患排查实施方案
- win7共享文件服务器设置密码,Win7局域网共享文件夹添加密码保护文件安全的方法...
- igraph入门教程
- php 公众号 模板消息id如何获取_微信公众号后台模板消息如何实现发送的功能...
- SpringBoot接口数据加解密实战
- 基于微信视频分享平台小程序设计与实现 开题报告
- 五面拿下阿里飞猪offer,java图形界面设置背景颜色
- i春秋之SQL(详细WP)
- java特种兵 怎么样_第1篇 Java功底篇免费阅读_Java特种兵(上册)免费全文_百度阅读...
- [趣味分享]纯手工机械的无碳小车
- 直播系统开发,一对一直播源码开发