lua数据存储与文件解析|lua文件格式

lua数据存储与文件解析|lua文件格式

1、简单介绍:

cocos2dx-lua中对文件的操作都用cc.FileUtils这个类进行操作,它是单一实例。

访问res目录:(fullPathForFilename(arg))

local fullPathForFilename =cc.FileUtils:getInstance():fullPathForFilename(“text.txt”)。如果该文件存放在该目录的其他文件夹下,也要相应的加上搜索目录。

判断文件是否存在:(isFileExist(arg))

local isExist =cc.FileUtils:getInstance():isFileExist(“text.txt”)

可写入目录:(getWritablePath())

local writablePath =cc.FileUtils:getInstance():getWritablePath()

2、实际操作:

--测试资源目录信息

local sharedFileUtils = cc.FileUtils:getInstance()

local function onClickMenu1(pSender)

localfullPathForFilename = sharedFileUtils:fullPathForFilename(“text.txt”)

print(fullPathForFilename) --如果res目录下,没有text.txt文件,那么输出为空

localisExist = sharedFileUtils:isFileExist(“text.txt”)

ifisExist == true then

print(“text.txtexists”)

else

print(“text.txtdoesn’t exists”)

end

end

--读文件

local fullPathForFilename =sharedFileUtils:fullPathForFilename(“test.txt”)

local content =sharedFileUtils:getStringFromFile(fullPathForFilename)

print(content)

--路径搜索

getSearchPaths() --获得所有搜索路径集合

setSearchPaths(searchPaths) --设置搜索路径集合

addSearchPath(path) --追加搜索路径

例如在新建的工程中,在main.lua中最开始的位置:

cc.FileUtils:getInstance():addSearchPath("src/")

cc.FileUtils:getInstance():addSearchPath("res/")

sharedFileUtils:purgeCachedEntries() --清理搜索文件缓存,一般是更新资源后进行搜索前调用。

local searchPaths = sharedFileUtils:getSearchPaths() --获得搜索路径的容器,返回值是一个table。

local writablePath = sharedFileUtils:getWritablePath() --获得可写目录

local resPrefix = “res/”

table.insert(searchPaths, 1, resPrefix..”dir2”)

table.insert(searchPaths, 1, resPrefix..”dir1”)

table.insert(searchPaths, 1, writablePath)

sharedFileUtils:setSearchPaths(searchPaths) --设置搜索目录

3、UserDefault用法

获取单一实例: localuserDefault = cc.UserDefault:getInstance()

常用方法:

local ret = userDefault:getStringForKey(“string”,“defaultString”)

userDefault:setStringForKey(“string”, “realString”)

getDoubleForKey、setDoubleForKey

getFloatForKey、setFloatForKey

getIntegerForKey、setIntegetForKey

getBoolForKey、setBoolForKey

4、字典列表结构的属性列表文件:

比如:

<plist version=”1.0”>

<dict>

<key>root</key>

<array>

<dict>

<key>date</key>

<string>2008-08-16</string>

<key>content</key>

<string>初始化</string>

</dict>

<dict>

<key>date</key>

<string>2016-08-16</string>

<key>content</key>

<string>欢迎使用</string>

</dict>

</array>

</dict>

</plist>

那么读取上面数据:

local fileUtils = cc.FileUtils:getInstance()

local fullPathForFileName =fileUtils:fullPathForFilename(“notice.plist”)

local dict = fileUtils:getValueMapFromFile(fullPathForFileName)

for key, value in pairs(dict) do

for i =1, table.getn(value) do

localrow = value[i]

localdate = row[“date”]

localcontent = row[“content”]

end

end

5、访问根为列表结构的属性列表文件

<plist version = “1.0”>

<array>

<dict>

<key>date</key>

<string>2010-08-04</string>

<key>content</key>

<string>初始化</string>

</dict>

<dict>

<key>date</key>

<string>2016-8-16</string>

<key>content</key>

<string>欢迎使用</string>

</dict>

</array>

</plist>

读取上面数据

local fileUtils = cc.FileUtils:getInstance()

local fullPathForFileName =fileUtils:fullPathForFilename(“notice.plist”)

local vector = fileUtils:getValueVectorFromFile(fullPathForFileName)

for i = 1, table.getn(vector) do

local row= vector[i]

localdate = row[“date”]

localcontent = row[“content”]

end

6、json解析

json.decode(jsonStr)

json解码主要通过decode函数实现,将字符串转为json对象或json数组

local jsonStr = ‘[{“ID”:”1”, “CDate”:”19920715”, “Content”:”发布iOSBook0“},

{“ID”:”2”, “CData”:”19920912”,“Content”:”发布iOSBook1”}]’

local jsonArray = json.decode(jsonStr)

for i = 1, table.getn(jsonArray) do

localjsonObj = jsonArray[i]

local ID= jsonObj[“ID”]

localCDate = jsonObj[“CDate”]

localContent = jsonObj[“Content”]

end

json.encode(jsonArray)

json编码主要通过encode函数实现,将json数组或对象转为字符串

local jsonObj = {ID=”1”, CDate=”19920715”, Content = “发布iOSBook0”}

local jsonStr = json.encode(jsonObj)

推荐阅读