lua io库(输入输出)

2018-05-07 10:25:26

lua io库提供了2种模式来文件处理
1.简单模式-所有操作会在2个当前文件(默认为标准输入stdin,标准输出stdout)
2.完全模式-基于文件句柄,功能丰富一点

简单模式

--接收任意个参数,默认写到标准输出stdout
io.write('www', '.','freecls','.','com','\n')

--默认从stdin读取
local t = io.read('*n')
--'*a'  读取整个文件
--'*l'  读取下一行(不包括换行符)=io.read()
--'*L'  读取下一行(包括换行符)
--'*n'  读取一个数字(非数字开头返回nil,数字开头直到读到非数字)
--num   读取num个字符

--返回空字符代表还没到文件末尾,返回nil代表已到文件末尾
io.read(0)

io.input---io.input ([file])
--打开并设置为默认的读取文件
--如果提供的是handler,则直接设置
--如果没提供参数,返回默认读取文件

[io.output]---io.output ([file])
--打开并设置默认的输出文件
--其他同上

--小技巧
local tmp = io.input()  --保存当前的输入文件句柄
io.input('tmp.txt')     --打开新文件并设置为当前文件句柄
--do something
io.input():close()      --关闭文件
io.input(tmp)           --恢复


--迭代一行一行读取整个文件
io.lines()

--例子
local lines = {}
for line in io.lines() do lines[#lines + 1] = line end
--排序
table.sort(lines)
--重新写入
for _, l in ipairs(lines) do io.write(l, "\n") end


完全模式

io.open--io.open(filename [,mode])

-- r	以只读方式打开文件,该文件必须存在。
-- r+	以可读写方式打开文件,其他的同上
-- w	打开只写文件,内容清0,不存在创建
-- w+	读写模式打开,其他同上
-- a	追加只写模式打开,不存在则创建
-- a+	追加读写模式打开,其他同上
-- b	二进制模式,如果文件是二进制文件
-- +	表示对文件既可以读也可以写

-- 以只读方式打开文件
local f = io.open("test.lua", "r+")

-- 读取第一行
file:read()

-- 关闭打开的文件
file:close()

-- 写入内容
file:write("--test")

--定位文件光标(也就是设置从文件的哪里读取或写入数据)
file:seek(whence, offset)
--"set": 从文件头开始
--"cur": 从当前位置开始[默认]
--"end": 从文件尾开始
--offset:默认为0

file:seek()     --返回当前位置
file:seek("set")    --定位到文件头
file:seek("end")    --定位到文件尾

file:flush()
--刷新缓冲区
--一般为了性能考虑,当向文件写入一段数据时,不会立刻写入,而是先
--缓存到内存缓冲区,然后当满足某个条件或显示调用file:flush()时
--才会立即把缓冲区的数据写入文件

file:setvbuf(mode[, size])
--设置缓冲模式
-- 'no' 不缓冲直接写入(不推荐,除非在开发调试阶段)
-- 'full' 全缓冲,只有当缓冲区满了的时候才会立即写入
-- 'line' 行缓冲,遇到换行符的时候立即写入
-- 当显示调用file:flush()就会立即写入


io.popen (prog [, mode]) 

运行一个程序并返回文件句柄来读写,mode默认为r
注意,这个方法不是每个操作系统都支持
本人的是centos7 64位可以用来执行shell命令

例子

local h = io.popen('ls -al /')
local s = h:read("*a")
print(s)


io.type(obj)

用来检测obj是否为合法的句柄,返回
'file' 代表打开的文件句柄
'closed file' 代表关闭的文件句柄
'nil' 代表不是文件句柄


io.tmpfile()

打开一个临时文件并返回句柄,程序结束的时候自动删除


总结 

1.本文只是对io库做简单的介绍,如果有疑问可以给我留言
2.lua的版本为5.1,运行环境centos7 64位
3.原文地址http://www.freecls.com/a/2712/11

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。