利用Lua读写本地文件
缘由
今天在使用Lua编写脚本时,需要用到读写文件的操作,很久没有使用Lua了,特写下此文来备忘一下。
简介
Lua对文件的操作与C对文件的操作基本一致,不管是参数还是方法。Lua中可以直接通过全局方法来对文件操作(简单模型),也可以采用面向对象的形式(完整模型)。
简单模型
io.input([file]) 设置默认的输入文件,file为文件名(此时会以文本读入)或文件句柄(可以理解为把柄,有了把柄就可以找到文件),返回文件句柄。
io.output([file]) 设置默认的输出文件,参数意义同上。
io.close([file]) 关闭文件,不带参数关闭默认的文件
io.read(formats) 读入默认文件,formats取值为"a"(读入全部)、“n”(按数字读入)、 "*l"(按行读入,默认方式)、n(即数字,读取n个字符)。
io.lines([fn]) fn文件名,若无文件,取默认文件,返回一个迭代器,可以用在for循环里。
io.write(value) 向默认文件写入内容。
io.flush() 把文件缓存里的操作立即作用到默认输出文件。
完整模型
简单模型里只能处理文本类型的文件,在完整模型里可以处理二进制文件。
处理文件的一般流程为:打开文件,获取文件的句柄;以文件句柄操作文件;关闭文件。
可以看到完整模型比简单模型复杂点,但优点是功能更强大。
io.open (fn [, m]) 打开文件,返回文件句柄,fn文件名,m模式有:
r 以只读方式打开文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
r+ 以可读写方式打开文件,该文件必须存在。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a+ 与a类似,但此文件可读可写
b 二进制模式,如果文件是二进制文件,可以加上b
+ 号表示对文件既可以读也可以写
以下的file是io.open返回的文件句柄,功能与简单模式类似,不再详述。
local file = io.open("xx.xx", "w)
file:close ()
file:read (formats)
file:lines()
file:write (values)
file:seek ([p] [, of]) 设置文件读写的偏移,p文件偏移起始位置(取值有"set",文件头,此为默认值,"cur"当前位置、"end"文件尾),of偏移量(默认值0,正的表示向前,负的表示向后),返回在文件里新的当前位置。
file:flush()
简单模型示例
--读取文件
local file1 = io.input("1.txt"); --1.txt文件必须存在,否则会出错
local data = io.read("*a");
print(data);
--写文件
local file2 = io.output(2.txt");
io.write(data);
io.flush();
io.close();
--文件复制函数
function copyFile(ff, ft)
local fsrc = io.input(ff);
if not fsrc then
print(ff.." Is not existed.");
return false;
end
local fdst = io.output(ft);
local data = io.read("*a");
io.write(data);
io.flush();
io.close();
return true;
end
完整模型示例
local f1 = io.open("3.txt", "a+");
f1:write("data!!!");
f1:flush();
f1:seek("end", -1); --定位到文件末尾的前一个字节
local data = f1:read(1); --读取一个字符
print(data);
f1:close()
利用Lua读写本地文件的更多相关文章
- (数据科学学习手札63)利用pandas读写HDF5文件
一.简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个H ...
- Flutter 读写本地文件
文档 注意 安装 path_provider 插件后重启f5, 而不是等待热更新 demo import 'dart:io'; import 'dart:async'; import 'package ...
- 利用java读写Excel文件
一.读取Excel文件内容 java 代码 public static String readExcel(File file){ StringBuffer sb = new StringBuffer( ...
- 利用gulp把本地文件移动到指定待发布文件夹
一.目标 把本地的文件移动到待发布的文件中,把static_grab文件中file.txt所列文件列表移动到beta对应文件夹中: 二.实现 var gulp = require('gulp'), w ...
- 利用Flume将本地文件数据中收集到HDFS
1. 创建文件 放入一个txt文件 然后查看hdfs上的文件夹 不知道为什么并没有出现本地的文件 也不报错 后来发现,没有在logs文件夹下面,在newlogs文件夹下面
- 利用VHDL读写file文件
library ieee; use std.textio.all; use ieee.std_logic_textio.all; use ieee.std_logic_1164 ...
- C# WPF 利用NPOI读写Excel文件
https://blog.csdn.net/a312024054/article/details/70139172 [各种样式] https://www.cnblogs.com/xwgli/archi ...
- node读写本地文件
http://nodejs.cn/api/fs.html#fs_fs_writefilesync_file_data_options https://www.cnblogs.com/diaosizha ...
- ios本地文件内容读取,.json .plist 文件读写
ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...
随机推荐
- java使用Websocket获取HttpSession出现的问题与解决
websocket的写法就不多说了,主要记一记其中出现的问题 1.获取不到httpSession 解决办法:先重写握手方法,将httpsession放入ServerEndpointConfig.get ...
- 没有选择上传的文件或选择的文件大小超出大小(DEDECMS亲身试验成功)
dedecms升级到5.7后,后台上传压缩包文件,提示"没有选择上传的文件或选择的文件大小超出大小",由于很久都没弄这个系统了,所以最早怎么设置的也忘记了,就上百度搜,基本上有说的 ...
- 更改sql多条数据,更新替换字符串中固定的字符串
需求产生的背景: 数据库里建库时插入了字典数据,可是这个字典数据,有一些是不准确的,所以就需要把一些固定的数据查出来替换掉. 问题解决逻辑: 大体逻辑是,首先把固定需要替换的字符串提取出来,赋值给变量 ...
- 2017-06-21(rmdir mv ln)
rmdir rmdir 删除空目录 mv mv 剪切或修改命令 mv [原文件或目录] [目标文件] [原文件与目标文件在同一目录下视为修改,在不同目录下视为剪切] ln ln 链接命令[用于 ...
- sass和compass实战 读书笔记(一)
sass优势: 不做重复的工作 一 消除样式表冗余(通过变量赋值的方式) 1. 通过变量来复用属性值 2. 使用嵌套来快速写出多层级的选择器 3. 通过混合器来复用一段样式 4. 使用选择器继承来避 ...
- jsp页面取值
一般就用el表达式 ${recordList[4].baseRate8.split("/")[0] } <s:date name="recordList[#id]. ...
- java从文件中读取json
wangxiaoer.json里面存放了json数据 需要依赖common-io.jar
- 将centos_yum源更换为阿里云(官方文档)
http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD 1.备份 mv /etc/yum.repos.d/CentOS ...
- 【转】linux下设置ssh无密码登录
ssh配置 主机A:10.0.5.199 主机B:10.0.5.198 需要配置主机A无密码登录主机A,主机B 先确保所有主机的防火墙处于关闭状态. 在主机A上执行如下: 1. $cd ~/.ssh ...
- jenkins之角色授权[六]
标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 有时候我们公司里面可能有好几个开发团队,当你做完jenkins后,对于测试环 ...