用lua格式做配置文件或记录文件,代码如下:
--[[ lua配置处理类 读写lua格式配置文件 Load 读取lua配置文件 Save 写入lua配置文件 GetConfig 获取当前缓存的配置 --]] local LuaConfig = class("LuaConfig") LuaConfig._instance = nil -- 各种参数 LuaConfig._config = nil LuaConfig._defFilePath = cc.FileUtils:getInstance():getWritablePath().."config.lua" LuaConfig._formatString = "" function LuaConfig:GetInstance() if LuaConfig._instance == nil then LuaConfig._instance = LuaConfig.new() end return LuaConfig._instance end function LuaConfig:ReleaseInstance() if LuaConfig._instance ~= nil then LuaConfig._instance:Release() LuaConfig._instance = nil end end function LuaConfig:ctor() end -- 设置格式化输出缩进 function LuaConfig:SetFormatString(formatString) self._formatString = formatString end -- 序列化 准备存储 返回序列化后的字符串 缩进暂时为1空格 参数为nil时 处理_config function LuaConfig:Serialize(config,formatString) if config == nil then -- nil不处理 return "nil" end local serializedConfig = "" local formatString = formatString or self._formatString local tableFormatString = string.gsub(formatString,self._formatString,"",1) -- table去掉一个缩进 -- 序列化操作 number boolean string table local paramType = type(config) if paramType == "number" then serializedConfig = serializedConfig..tostring(config) elseif paramType == "boolean" then serializedConfig = serializedConfig..tostring(config) elseif paramType == "string" then serializedConfig = serializedConfig..string.format("%q",config) -- 接受一个字符串并将其转化为可安全被Lua编译器读入的格式 主要防止使用if或其他关键字之类的作为key的情况 elseif paramType == "table" then serializedConfig = serializedConfig.."\n" serializedConfig = serializedConfig..tableFormatString.."{\n" for k,v in pairs(config) do serializedConfig = serializedConfig..formatString serializedConfig = serializedConfig.."["..self:Serialize(k).."]" serializedConfig = serializedConfig.." = " serializedConfig = serializedConfig..self:Serialize(v,formatString..self._formatString) serializedConfig = serializedConfig..",\n" end serializedConfig = serializedConfig..tableFormatString.."}" else print("can not handle this type:"..paramType) end return serializedConfig end -- 获取当前配置 function LuaConfig:GetConfig() return self._config end -- 读取配置 同时返回读取到的配置 方便外部操作 function LuaConfig:Load(path) if path == nil then path = self._defFilePath end local content = self:ReadFromFile(path) if content ~= nil then self._config = loadstring("return "..content)() -- loadstring载入后默认为function类型,需要加()以调用 end return self._config end -- 保存配置 参数为nil时 处理_config function LuaConfig:Save(path,config) -- 默认处理_config if config == nil then config = self._config end if path = nil then path = self._defFilePath end local isSuccess = false -- 设置缩进 self:SetFormatString(" ") -- 序列化 local serializedConfig = self:Serialize(config) if serializedConfig ~= nil then -- 存储到文件 isSuccess = self:SaveToFile(serializedConfig,path) end return isSuccess end -- 存储 function LuaConfig:SaveToFile(content,path) local isSuccess = false local file = io.open(path,"w") if file ~= nil then file:wirte(content) file:flush() isSuccess = true end io.close() -- 同file:close() 参数可传file,或默认关闭当前打开的 return isSuccess end -- 读取 function LuaConfig:ReadFromFile(path) local content = nil --[[ 调用lua本身接口 可能有文件大小限制 据说是最大9K 未验证 local file = io.open(path,"r") if file ~= nil then content = file:read("*a") -- 读取所有内容 end io.close() -- 同file:close() 参数可传file,或默认关闭当前打开的 --]] ---[[ 调用cocos相关接口 content = cc.FileUtils:getInstance():getStringFromFile(path) --]] return content end return LuaConfig主要是其中的序列化部分,其他都比较容易理解。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。