文件读写 文件读写对制做游戏颇有帮助。能够调用别的文件中的代码,保存最高分、游戏存档、玩家状态等信写到文件中。 首先,让咱们看一个简单的命令:dofile。这个命令会读入另外一个文件的代码并当即执行。 代码: dofile("./test.lua") 很简单的命令。注意 ./ 是指根目录,不是子目录。若是是子目录,应该这样用: 代码: dofile("./files/test.lua") 那么,若是咱们的文件 test.lua 包含下述代码: 代码: playerx = 10 playery = 20 enemyx = 40 enemyy = 50 一旦咱们用 dofile 调用这个文件,这些变量将当即获得声明。文件不是非得用 lua 后缀,txt 或其余后缀均可以。 从文件中读取一行: 假设你有一个不少行文本的文件,你想从中读取一行,并打印到屏幕上。为此咱们可使用 io.open() 命令打开文件并读取。 命令的语法是 io.open(filename, mode)。此处咱们将使用 r 做为 mode 的值,意指读取(read)模式。做为参考,下面是全部可用模式的列表: 引用: r - 读取模式w - 写入模式(覆盖现有内容) a - 附加模式(附加在现有内容以后) b - 二进制模式 r+ - 读取更新模式(现有数据保留) w+ - 写入更新模式(现有数据擦除) a+ - 附加更新模式(现有数据保留,只在文件末尾附加) 第一件要作的事情就是打开文件并存为一个变量。看下面。 代码: file = io.open("testRead.txt", "r") 如今咱们的文件 testRead.txt 已打开并处于读取模式。接着咱们使用 read() 命令读取文件中的单行内容存为另外一个变量。 代码: ourline = file:read() 这将读取咱们的文本文件的第一行。下一次咱们使用 read() 命令它将读取第二行。再下一次它会读取第三行,依此类推。 请注意,此命令前的 file 是咱们以前打开文件并保存的变量名,你可使用任何其余名字。file.read() 还可使用下列任一个参数,只要用引号括起来放入括号里就能够。 引用: *n - 读取一个数字并返回它。例:file.read("*n") *a - 从当前位置读取整个文件。例:file.read("*a") *l - (默认) - 读取下一行,在文件尾 (EOF) 处返回 nil。例:file.read("*l") number - 返回一个指定字符个数的字符串,或在 EOF 时返回 nil。例:file.read(5) 既然咱们已经读取到所要的那一行,咱们须要关闭打开的文件,像这样: 代码: file:close() 如今要打印咱们的文件至屏幕咱们只要这么作: 代码: screen:print(10,10,ourline,white) 读取全部行 要读取一个文件的全部行,你能够在一个 for 语句中使用上述技巧。请看下述代码: 代码: y = 10 file = io.open("testRead.txt","r") for line in file:lines() do y = y + 10 screen:print(100,y,line,white) endf ile:close() 这个代码设置了一个起始值 y 用于打印,这样它能够在屏幕不一样的纵坐标打印每一行。照例,先打开文件。而后是 for 语句,这句代码是说文件的行数有多少下面的代码就执行几回。咱们的 y 坐标则每次循环加上 10 以便打印命令能够打印下一行。 写入文件(覆盖) 写入文件的方式大体相同。下面的代码将覆盖任何先前写入文件的内容: 代码: file = io.open("testRead.txt","w")file:write("hello")file:close() 注意,咱们此次使用了 w 模式,而不是 r 模式,由于咱们是要写入而不是读取。咱们用 file:write() 写入括号里做为参数的、用引号括起来的文本。你也能够用变量替代。若是你使用变量就不要用引号,请看下例: 代码: file = io.open("testRead.txt","w")myText = "Hello"file:write(myText)file:close() 写入文件(附加) 你可使用附加模式,这样就能够在写入文件时将新内容附加在已有文本末尾,而不是删除原来的。作法与上面基本相同,除了模式换成“附加”以外。请看代码: 代码: file = io.open("testRead.txt","a")myText = "\nHello"file:write(myText)file:close()