Lua学习笔记-文件读写
来源:互联网 发布:淘宝c店被方正字体投诉 编辑:程序博客网 时间:2024/05/09 05:31
背景:
采用Lua进行文件读和写操作,最终简单模拟文件的复制操作。
第一大类:IO表调用方式
1、
简单读写模式:
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() 把文件缓存里的操作立即作用到默认输出文件。
例子:
--读操作local file1=io.input("Jdataresult.txt") --当前目录"Jdataresult.txt"要存在,不然出错local str=io.read("*a")print(file1)print(str);--一次性打印出文件中的内容--写操作local file2=io.output("2.txt") --当前目录"2.txt"不需要存在io.write(str)io.flush()io.close()
read是对当前输入文件的处理,当没有当前文件时候,则为屏幕的IO。
使用如下所示:
代码:
–[read函数的使用方法]
– oneline=io.read(“*line”)
– print(oneline)–将从屏幕读取的字符串,打印出来。回车作为结束符。因为是读取一行而已
– oneline=io.read(“*all”)–这种方式的话,则没有结束符进行识别,所以只能进行中断
– print(oneline)
– oneline=io.read(“*number”)– 调用io.read(“*number”)会从当前输入文件中读取一个数字。此时read将直接返回一个数字,而不是字符串。”*number”选项会忽略数字前面所有的空格,并且能处理像-3、+5.2这样的数字格式
– print(oneline)–如果输入第一个是非数字的话,则返回nil。如果输入123,会将123视为一个数字,123a,则会将a忽略,只提取123
– oneline=io.read(5)–调用io.read()会从输入文件中最多读取n个字符,如果读不到任何字符,返回nil。否则返回读取到的字符串
– print(oneline)
–io.read(0)是一种特殊的情况,用于检查是否到达了文件的末尾。如果没有到达,返回空字符串,否则nil。
采用以下方式对文本进行遍历:
local file1=io.input("2.txt")for oneline in io.lines() do print(oneline)end--read方式,下面这种方式需要先将上面的代码先注释掉,否则此时的文件已经移动到末尾了,下面的方式读取结果将会是nilprint("另一种方式:\r")for count=1,math.huge do oneline=io.read("*line") print(oneline) if oneline == nil then break endend
如果采用io.lines的方式,竟然出现了首个字符丢失的情况。目前不知道是何原因?有待排查:
代码:
list=nilfor line in io.lines("2.txt") do --若不带参数时io.lines() <=> io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件 print(line) list={next=list,value=line}end-- 从标准输入读取每行。然后反序形成链表,打印如下--list的输出结果print("List的输出结果:\r")l=listwhile l do print(l.value)--为何第一个字符没有了?? l=l.nextend
–输入结束符呢?
2、
完整模型
简单模型里只能处理文本类型的文件,在完整模型里可以处理二进制文件。
处理文件的一般流程为:打开文件,获取文件的句柄;以文件句柄操作文件;关闭文件。
可以看到完整模型比简单模型复杂点,但优点是功能更强大。
io.open (fn [, m]) 打开文件,返回文件句柄,fn文件名,m模式有:
r 以只读方式打开文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
r+ 以可读写方式打开文件,该文件必须存在。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a+ 与a类似,但此文件可读可写
b 二进制模式,如果文件是二进制文件,可以加上b
- 号表示对文件既可以读也可以写
以下的file是io.open返回的文件句柄,功能与简单模式类似,不再详述。
file :close ()
file :read ( formats )
file :lines ()
file :write ( values )
file :seek ([p] [, of]) 设置文件读写的偏移,p文件偏移起始位置(取值有”set”,文件头,此为默认值,”cur”当前位置、”end”文件尾),of偏移量(默认值0,正的表示向前,负的表示向后),返回在文件里新的当前位置。
file :flush ()
上述的方式都是io表调用方式,即使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述。io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr
简单模型里只能处理文本类型的文件,在完整模型里可以处理二进制文件。
第二大类:文件句柄调用方式
另外一种方式则是文件句柄直接调用方式,使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄。
未完,待续!
- Lua学习笔记-文件读写
- Lua学习笔记8:文件读写
- 文件读写学习笔记
- 文件读写学习笔记
- 学习笔记---文件读写
- Python学习笔记--文件读写
- python学习笔记 文件读写
- Lua读写EXCEL文件
- lua文件读写
- Lua 文件读写
- lua文件读写
- lua文件读写
- lua读写文件
- lua 文件读写
- lua 读写文件
- lua 读写文件
- Lua文件读写详解
- lua文件读写
- TexturePacker介绍
- 详解基于LRU缓存的LruCache类及其在Android内存优化中的应用
- MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
- 华为机试题--12.字串的连接最长路径查找
- expdp 详解及实例
- Lua学习笔记-文件读写
- android wake_lock 在底层实现系统不休眠
- 学习web
- iframe 自适应宽高
- redis学习笔记之虚拟内存
- IM开发(1)-ejabberd服务器搭建
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
- 直播平台的高并发架构设计3.2-分发网络
- oracle存储过程通过SMTP发送E-MAIL邮件代码