天天看點

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)