持久化数据,是每一个私服开发者必须会的,前面已经说了lua 表数据与字符串互转,那么本篇文章就可以通过此来实现数据的持久化!
第一步: 打开文件
file = io.open (filename,mode)
- filename代表的是文件名
- mode 代表的模式
mode值 | 描述 |
---|---|
r | 以只读方式打开文件,该文件必须存在。 |
w | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) |
r+ | 以可读写方式打开文件,该文件必须存在。 |
w+ | 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
a+ | 与a类似,但此文件可读可写 |
b | 二进制模式,如果文件是二进制文件,可以加上b |
+ | 号表示对文件既可以读也可以写 |
第二步: 读取文件
-- 系统提供的方法IO.xxx
file = io.open("d://nihao.txt","r")
-- 声明接下来的io操作对象都是file
io.input(file)
print(io.read()) --读取一行
print(io.read()) --读取第二行 如果第二行没有就会输出 nil
-- 关闭操作文件对象
io.close(file)
读取完毕,如果不写入的话,需要关闭文件
-- 关闭打开的文件
file:close() 这里等价于 io.close(file)
第三步: 写文件
-- 获取写入对象 file1 并指定mode为 保留原文件内容的写
file = io.open("d://nihao.txt","a")
-- 获取输出流对象,写文件必须有这个对象
io.output(file1)
-- 正常的写入操作
io.write("www.baidu.com")
io.write("\n") -- 换行
-- io.flush()
-- 关闭文件
io.close(file1)
其他案例
-- 读取文件
local f = assert(io.open(fileName,'r')) -- 这里假如断言读取文件,没有发现特别的点
local content = f:read('*all')
f:close()
-- 写文件
local f = assert(io.open(fileName,'w'))
f:write(content)
f:close()
真实环境操作
我制作NPC路径的时候 不停的!pos 这个感觉非常的难受,于是就萌生了,执行!pos后,会将位置信息,记录在文件中,这样我就可以一次性复制出完整的NPC路径了!非常的银杏!
--读取一个文件
local myfile = io.open("NpcRoute.txt","a")
-- 如果打印nil 代表文件不存在
if myfile == nil then
print("原文件是不存在,如果后续执行写入文件,将会创建此文件!")
else
print("原文件存在,无需创建新文件!")
end
-- 获取当前文件输出流
io.output(myfile)
-- 写一个Hello World 并换行
io.write("x ,y ,z ,\n") -- 调用IO去写,这里不清楚如果读取多个文件是否会导致io对象代表谁?
--myfile:write("x ,y ,z ,\n") -- 这里是指定对象写入 调用write是: 不是. 与上面记录x,y,z 等价
-- 向文件写入缓冲中的所有数据,暂时没发现什么用,可有可无
io.flush()
-- 关闭打开的文件
io.close(myfile)
print("本次IO操作完成")
执行2次结果如下:
完成!
特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤
评论(0)