lua数据存储与文件解析

    xiaoxiao2026-03-14  12

    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)

    转载请注明原文地址: https://ju.6miu.com/read-1307946.html
    最新回复(0)