Lua I/O库(一)

     Lua的I/O库主要用于读取和处理文件,I/O库具体的文件操作接口都存在于_G全局表的io字段中,for循环遍历打印io字段,会发现io字段里包含着对应文件操作相关api接口(lines,write,close等等)

   一,Lua的I/O库为文件操作提供了两种不同的模型:简单模型和完整模型。

   1,简单模型:

    该模型假设有一个当前的输入文件和一个当前的输出文件,它的I/O操作均作用于当前选定的这两个文件该模型下针对当前文件的所有操作方法均由表io提供。通过io.input和io.output确定当前需要操作的输入文件和输出文件,可以通过再次调用io.input和io.output的方法更改当前要操作的输入和输出文件。

    默认情况下,I/O库将当前输入文件初始化为进程标准输入(stdin),将当前输出文件初始化为进程标准输出。在执行io.read()操作时,就会从标准输入中读取一行。io.input(filename)调用会以只读模式打开指定的文件,并将其设定为当前输入文件;除非再次调用io.input否则所有的输入都将来源于这个文件;在输出方面,io.output也可以完成类似的工作。
   2,完整模型:
      类似于C运行时库的文件操作函数,它们都是基于文件句柄的。 采用面向对象的风格并将所有的操作定义为文件句柄上的方法。
      通过io.open 函数打开指定的文件,并且在参数中给出对该文件打开时使用的具体模式。在成功打开文件后,该函数将返回表示该文件的句柄,后面所有基于该文件的操作,都需要将该句柄作为参数传入(冒号语法糖的方式)。如果打开失败,返回nil。其中错误信息由该函数的第二个参数返回,如:
     local file = assert(io.open(filename[,mode]))   --如果打开失败assert将打印第二个参数给出的错误信息。
此时返回的file就是当前完整模型下的文件句柄。
   出现两种模型,主要是为了解决文件操作的一些高级用法(比如:同时读取多个文件,简单模型同一时刻只能操作一个当前的输入文件)
   
   二,文件读取模式
   1,io.open中的mode方式
模式描述
"r"只读模式,只读方式打开(默认),不能写入,该文件必须存在,否则报错
"w"只写模式,不能读取;
若文件存在则文件内容清空,文件长度清为0,写入新的内容;
若文件不存在则建立该文件。
"a"追加模式,不能读取;
以写入内容附加的方式打开文件;
若文件不存在,则会建立新的文件;
如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
"r+"以可读写的方式打开文件,保留原有的数据
后续可对该文件已有的内容进行读写操作,该文件必须存在(该模式自由度最高)
"w+"以可读写的方式打开文件,删除原有数据
如果文件已存在则删除文件中数据,即文件会是个空文件;
若文件不存在则新建文件,文件内容也会是空。
"a+"以可读写的方式打开文件,保留原有的数据
只能在文件末尾添加,不能在文件中间改写数据;
若找不到文件,则创建新的文件。
     "r"和"r+"的模式下,文件不存在时会报错;"a","a+","w","w+"模式下文件不存在时会自动创建文件。
    2,io.read中的mode方式

"*all"

从当前位置读取整个文件,若为文件尾,则返回空字串

"*line"

[默认]读取下一行的内容,若为文件尾,则返回nil

"*number"

读取指定字节数的字符,如果number0则返回空字串,若为文件尾,则返回nil;

<num>

读取num个字符到串


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值