Lua学习 -- 文件 I/O

对文件操作之前要先打开文件

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

filename:要操作的文件与该lua文件的相对位置,
mode:打开文件的方式(具体值见下表),

模式描述
r以只读模式打开文件,改文件必须存在。
w以只写模式打开,若文件存在则文件长度清为0,即删除文件内容。若文件不存在则建立该文件。
a以附加的方式打开只写文件。若文件不存在,则新建该文件,若果存在,写入的数据会被加到文件内容尾部,文件原来的内容会被保留。
r+以可读写模式打开,该文件必须存在。
w+以可读写模式打开,若文件存在删除原内容,若不存在新建文件。
a+以可读写模式打开,若文件存在保留文件原内容,写入的数据加到文件内容尾部,若不存在新建文件。
b二进制模式,如果文件是二进制文件,使用此模式
+该符号表示可读可写

简单模式

test.lua文件(初始)

hello
hello
readFile = io.open("test.txt","r") //以只读模式打开文件
io.input(readFile)//将文件设为默认的输入文件
readTest = io.read()//读取文件第一行数据
print(readTest)//hello
io.close(readFile)//关闭打开的文件

writeFile = io.open("test.txt","a")//以附加只写模式打开文件
io.output(writeFile)//将文件设为默认的输出文件
io.write("--thank you")//在文件内容尾部加上数据
io.close(writeFile)//关闭打开的文件

test.lua文件(运行一次程序后)

hello 
hello--thank you
io.read()也可以传入一些参数来更改读取的模式**:
模式描述
“*n”读取当前指针之后的数字,到当前行尾,若不为数字返回nil
“*a”读取从当前指针位置到文件尾部的字符
“*l”读取当前指针位置到所在行尾部的字符,再将指针移到下一行(默认为此模式)
number读取指定字符个数的字符串,需要换行时会消耗两个字符

test.lua文件

hello
k2333haha
hello2
hello3
readFile = io.open("test.txt","r")
io.input(readFile)
readTest1 = io.read(7)//读取7个字符
readTest2 = io.read("*n")//读取之后到行尾的数字
readTest3 = io.read("*l")//读取到当前行尾,并指到下一行
readTest4 = io.read("*a")//读取之后到文件尾部的字符
print(readTest1)
print("-------------")
print(readTest2)
print("-------------")
print(readTest3)
print("-------------")
print(readTest4)
io.close(readFile)

运行结果

hello
k
-------------
2333
-------------
haha
-------------
hello2
hello3
其它的I/O方法:

io.tmpfile():返回一个临时文件,该文件以更新模式打开,程序结束时自动删除
io.type(file):检测是否为文件类型
io.flush():向文件写入缓冲中的所有数据
io.lines(optional file name):返回一个迭代函数,每次调用将获得文件中的一行内容,若文件尾则返回nil,结束不会关闭文件

完全模式

需要同时处理多个文件时,使用完全模式
实质与简单模式类似,只是将io.func换为file:func

test.txt文件

hello
hello
file = io.open("test.txt","r")//以只读模式打开test.txt
print("read line1:",file:read())//读取文件第一行内容,指到下一行
print("seek1:",file:seek())//获取当前指针位置
print("seek2:",file:seek("cur",1))//从当前位置前进一位,并返回位置
print("read 5:",file:read(5))//输出之后的5个字符
print("seek3:",file:seek())//获取当前位置
file:close()//关闭文件
file = io.open("test.txt","a")//以附加只写模式打开
file:write("-haha")//在文件尾写入字符串
file:close()//关闭文件

运行结果:

read line1:     hello
seek1:  7
seek2:  8
read 5: ello
seek3:  12

file:seek(optional whence,optional offset) 设置和获取当前读取指针位置,成功则返回当前位置,失败返回nil和错误信息。(参数:
whence 是指针移动的相对位置,“set” – 从文件头开始;“cur” – 从当前位置开始(默认);“end” – 从文件尾开始。
offset 是指针从相对位置移动的距离,默认为0,可以是正数或负数。)例:file:seek("end",-6) 就表示指向从结束处倒数6个字符的位置。

file:flush() 向文件写入缓冲中的所有数据
io.lines(optional file) 打开指定文件为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时返回nil,并自动关闭文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值