Lua文件读写详解

lua里的文件读写模型来自C语言,分为完整模型(和C一样)、简单模型。

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() 把文件缓存里的操作立即作用到默认输出文件。

例子在最后。

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 ()

3、示例

代码如下:

------------------简单模型-----------------
--读
local file1=io.input("1.txt")  --当前目录"1.txt"要存在,不然出错
local str=io.read("*a")
print(str)
--写
local file2=io.output("2.txt") --当前目录"2.txt"不需要存在
io.write(str)
io.flush()
io.close()

--利用这几个函数可以做一个文件复制的函数
function copy(fileA,fileB)
  local file1=io.input(fileA)
  if not file1 then print(fileA.."不存在") return end
  local str=io.read("*a")
  local file2=io.output(fileB)
  io.write(str)
  io.flush()
  io.close() 
end

for line in io.lines("1.txt") do
  print(line)
end
------------------完整模型-----------------
local f=io.open("3.txt","a+")
f:write("Happy New Year!")
f:flush()

f:seek("end",-1) --定位到文件末尾前一个字节
local str=f:read(1) --读取一个字符
print(str) --输出"!"
f:close()

(0)

相关推荐

  • Lua判断一个目录或文件是否存在的方法

    一.使用io.open Open 一下就可以了. 复制代码 代码如下: file,err=io.open("XXXX") 如果文件正常打开 file为文件句柄,err 为 nil .否则 file 为 nil ,err为错误信息 "drr: No such file or directory". 只需要 open 一下.然后看看返回值. 复制代码 代码如下: somefile="xxxj.pdf" local F,err=io.open(some

  • Lua中实现递归删除一个文件夹

    在使用 quick-cocos2d-x 做项目热更新的时候,我需要建立临时文件夹以保存下载的更新包.在更新完成后,我需要删除这些临时文件和文件夹. cocos2d-x 和 quick-cocos2d-x 都没有提供删除文件夹功能.我做了如下2个尝试: 1. 使用C++ 在 cocos2d-x 2.x 中的 AssetsManager包中提供了一个 CreateDirectory 方法.这个方法可以跨平台支持创建文件夹.在实际项目中运行没有问题. 复制代码 代码如下: bool AssetsMan

  • Lua读取和写入文件处理例子

    一.文件读存: 复制代码 代码如下: -- 似乎不支持大文件(不能超过9k?) function FileSaveLoad()       local file = io.open("c:\\in.lua", "r");       assert(file);       local data = file:read("*a"); -- 读取所有内容       file:close();       file = io.open("c

  • Lua获取文件长度和判断文件是否存在函数分享

    获得文件长度 复制代码 代码如下: function length_of_file(filename)   local fh = assert(io.open(filename, "rb"))   local len = assert(fh:seek("end"))   fh:close()   return len end 判断文件是否存在 复制代码 代码如下: function file_exists(path)   local file = io.open(p

  • Lua文件读写详解

    lua里的文件读写模型来自C语言,分为完整模型(和C一样).简单模型. 1.简单模型 io.input([file])  设置默认的输入文件,file为文件名(此时会以文本读入)或文件句柄(可以理解为把柄,有了把柄就可以找到文件),返回文件句柄. io.output([file])  设置默认的输出文件,参数意义同上. io.close([file]) 关闭文件,不带参数关闭默认的文件 io.read(formats) 读入默认文件,formats取值为"*a"(读入全部)."

  • lua文件操作详解

    I/O库提供两种不同的方式进行文件处理: io表调用方式 使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述.io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr 文件句柄直接调用方式 即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄.多数I/O函数调用失败时返回nil加错误信息,有些函数成功时返回nil IO io.close ([file]) io.flush () 相当于file:

  • C# FileStream文件读写详解

    FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据.字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行,稍后对此进行介绍. 还有几种方法可以创建FileStream对象.构造函数具有许多不同的重载版本,最简单的构造函数仅仅带有两个参

  • python文件处理--文件读写详解

    目录 1. 读取文件 2. 写入文件 总结 1. 读取文件 文件读取很简单,就三步. 第一:在Windows的记事本中直接输入"愿你出走半生归来仍是少年!" 第二:通过代码读取文件 步骤: 1.使用open()函数打开文件. myfile = open(r'test.txt','r') myfile是变量,存放读取的文件. 第一个r是固定符号(原生字符). 'test.txt'是需要读取文件的文件名,在这里, readfile.py文件与test.txt文件需要放在同一文件夹内. 最后

  • C/C++中文件的随机读写详解及其作用介绍

    目录 概述 随机读写 函数 例子 指针流成员函数 随机访问二进制数据 概述 文件的操作方式分为顺序读写和随机读写. 顺序读写指文件的指针只能从头移到尾巴. 随机读写指文件指针可以随意移动, 根据需要. 随机读写 文件指针: 在磁盘文件操作中有一个文件指针, 用来指明进行读写的位置. 函数 文件流提供了一些有关文件指针的成员函数: 成员函数 作用 gcount() 返回最后一次输入所读入的字节数 tellg() 返回输入文件指针的当前位置 seekg (文件中的位置) 将输入文件中指针移到指定的位

  • Java使用FileInputStream流读取文件示例详解

    一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念  FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 2)构造方法 2.1)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象

  • C/C++中二进制文件&顺序读写详解及其作用介绍

    目录 概述 二进制 vs ASCII 二进制写入 ASCII 写入 read 和 write 读写二进制文件 案例一 案例二 概述 二进制文件不同于文本文件, 它可以用于任何类型的文件 (包括文本文件). 二进制 vs ASCII 对于数值数据, ASCII 形式与二进制形式不同. ASCII 文件直观, 便于阅读, 但一般占存储空间较多, 而且需要花时间转换. 二进制文件是计算机的内部形式, 节省空间且不需要转换, 但不能直观显示. 对于字符信息, 在内存中是以 ASCII 代码形式存放, 无

  • Java IO流之原理分类与节点流文件操作详解

    目录 IO流简介 IO流原理 流的分类 IO 流体系 节点流和处理流 节点流操作 IO流简介 I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输.如读/写文件,网络通讯等. Java程序中,对于数据的输入/输出操作以"流(stream)" 的方式进行. java.io包下提供了各种"流"类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据. IO流原理 输入input:读取外部数据(磁盘.光盘等存储设备的数据

  • Go语言学习之文件操作方法详解

    目录 引言 1. 打开和关闭文件 2. 读取文件 2.1 defer 语句 2.2 手动宕机处理 2.3 打开文件并获取内容 2.4 bufio 读取文件 2.5 ioutil 读取文件 2.6 读取奇偶行内容 3. 写入文件 3.1 os.OpenFile() 函数 3.2 Write 和 WriteString 方式写入 3.3 bufio.NewWriter 方式写入 3.4 ioutil.WriteFile 方式写入 引言 计算机的文件是存储再外部介质(硬盘)上的数据集合,文件分为文本文

  • Node.js基础入门之缓存区与文件操作详解

    目录 缓存区 1. 什么是缓存区? 2. 创建指定长度的缓存区 3. 通过数组创建缓存区 4. 通过字符串创建缓存区 5. 读写缓存区 6. 复制缓存区 文件操作 1. 异步直接读取 2. 同步直接读取 3. 流式读取 4. 写入文件 5. 流式写入文件 6. 读取文件信息 7. 删除文件 8. 管道 9. 链式流 经过前面三天的学习,Node.js的基础知识已逐渐掌握,今天继续学习缓存区和文件操作,并稍加整理加以分享,如有不足之处,还请指正. 缓存区 1. 什么是缓存区? JavaScript

随机推荐