如何从项目内任意文件夹加载json文件?

如何从项目内的任意文件夹中加载 JSON 文件?

我有一个数据文件夹,其中包含用户数据文件 user_data.json,但 system.DocumentsDirectory 指向另一个文件夹(我从网上复制,我对 Lua 和 Corona 还相当陌生)。

function custom_load( strFilename )
    local path = system.pathForFile( strFilename, system.DocumentsDirectory )
    local file = io.open( path, "r" )

    if file then
        local content = file:read( "*a" )
        io.close( file )
        return contents
    else
        return ''
    end
end
点赞
用户1870706
用户1870706

在读取文件之前,必须先存在它。也许对 Corona SDK 文件夹结构的简要描述可以帮助你理解发生了什么。

所有应用程序,无论是在 iOS、Android 还是 Corona 模拟器中运行,都由“应用程序包”组成。在 iOS 中,这是 Corona SDK 生成的 .app 文件;在 Android 中,这是 .apk 文件。位于 main.lua 和你创建的任何文件夹中的文件均是此应用包的一部分。出于安全考虑,该文件夹对你的应用程序是“只读”的。Corona SDK 允许你引用此文件夹中的文件,例如 system.ResourceDirectory。

一旦应用程序被创建并运行在设备上,你应用程序的 Sandbox 将创建另外三个文件夹。这是只有你的应用程序能够访问的区域。这些文件夹包括:

system.DocumentsDirectory,一个可读可写的文件夹,用于存储你想要保留在应用程序中的东西。这是你将要保存的设置文件、你的用户使用你的应用程序创建的文件等的存储位置。

system.TemporaryDirectory,一个可读可写的文件夹,用于存储你不需要保留的东西。这是你可以下载文件的地方,例如你打算丢弃的文件等。

在 Apple 的 iOS 中,有第三个文件夹,称为 Corona 所称的 system.CachesDirectory,它像 system.TemporaryDirectory 一样,不能保证存储的文件可以长时间存在,但苹果的意图是,如果你能够从网络上下载它并且它被删除了,你总是能够重新下载它。在 Android 上,system.CachesDirectory 和 system.TemporaryDirectory 是相同的文件夹。

由于假设应用程序是唯一可以写入其沙箱的东西,因此 system.DocumentsDirectory 中的文件必须由应用程序创建。你不能只是把文件放在那里(好吧,在模拟器上有特殊的方法,如果你知道在你的 Mac 或 PC 上哪里找到它,但这不是用户加载你的应用程序的实际情况),因此你的应用程序必须在 system.DocumentsDirectory 中创建该文件。

如果文件尚未创建,则尝试使用“读取”模式(“r”)打开文件的 io.open() 将返回 nil,因为文件不存在。

2014-07-20 01:10:36
用户2653067
用户2653067

别担心,它非常简单,只需参考这个代码,阅读后你就会自动编写。

https://github.com/robmiracle/Simple-Table-Load-Save-Functions-for-Corona-SDK/blob/master/main.lua

2014-07-21 06:46:37
用户2424993
用户2424993

pathForFile 中使用:

local path = system.pathForFile( "data/user_data.json", system.ResourceDirectory)
2014-07-21 14:38:38