跳到主要内容

文件系统概览

文件系统是小游戏宿主提供的一套以小游戏宿主和用户维度隔离的存储以及一套相应的管理接口,通过tj.getFileSystemManager() 可以获取到全局唯一的文件系统管理器 FileSystemManager ,用于管理所有的文件系统操作。

var fs = tj.getFileSystemManager()

文件主要分为两大类:

  • 代码包文件:代码包文件指的是在项目目录中添加的文件。
  • 本地文件:通过调用接口本地产生,或通过网络下载下来,存储到本地的文件。

其中本地文件又分为三种:

  • 本地临时文件:临时产生,随时会被回收的文件。不限制存储大小。
  • 本地缓存文件:小游戏宿主通过接口把本地临时文件缓存后产生的文件,不能自定义目录和文件名。
  • 本地用户文件:小游戏宿主通过接口把本地临时文件缓存后产生的文件,允许自定义目录和文件名。

代码包文件​

由于代码包文件大小限制,代码包文件适用于放置首次加载时需要的文件,对于内容较大或需要动态替换的文件,不推荐用添加到代码包中,推荐在小游戏启动之后再用下载接口下载到本地。

访问代码包文件​

代码包中文件的路径均从项目根目录开始,不支持相对路径的写法。例如:

  • 合法路径:/a/b/c、a/b/c
  • 非法路径:.a/b/b、../a/b/c

修改代码包文件​

代码包内的文件无法在运行后动态修改或删除,修改代码包文件需要重新发布版本。

本地文件​

本地文件指的是小游戏被用户添加到手机后,会有一块独立的文件存储区域,以用户维度隔离。即同一台手机,每个用户不能访问到其他登录用户的文件,同一个用户不同 appId 之间的文件也不能互相访问。 本地文件的文件路径均为以下格式:

{{协议名}}://文件路径

其中,协议名在iOS/Android/PC宿主中为"tjfile"

本地临时文件​

本地临时文件只能通过调用特定接口产生,不能直接写入内容。本地临时文件产生后,仅在当前生命周期内有效,重启之后即不可用。因此,不可把本地临时文件路径存储起来下次使用。如果需要下次在使用,可通过 FileSystemManager.saveFile() 或 FileSystemManager.copyFile() 接口把本地临时文件转换成本地缓存文件或本地用户文件。

示例​

tj.chooseImage({
success: function (res) {
var tempFilePaths = res.tempFilePaths // tempFilePaths 的每一项是一个本地临时文件路径
}
})

本地缓存文件​

本地缓存文件只能通过调用特定接口产生,不能直接写入内容。本地缓存文件产生后,重启之后仍可用。本地缓存文件只能通过 FileSystemManager.saveFile() 接口将本地临时文件保存获得。

示例​

fs.saveFile({
tempFilePath: '', // 传入一个本地临时文件路径
success(res) {
console.log(res.savedFilePath) // res.savedFilePath 为一个本地缓存文件路径
}
})

本地用户文件​

小游戏宿主提供了一个用户文件目录给开发者,开发者对这个目录有完全自由的读写权限。通过 tj.env.USER_DATA_PATH 可以获取到这个目录的路径。

示例​

const fs = tj.getFileSystemManager()
fs.writeFileSync(`${tj.env.USER_DATA_PATH}/hello.txt`, 'hello, world', 'utf8')

读写权限​

接口、组件读写
代码包文件有无
本地临时文件有无
本地缓存文件有无
本地用户文件有有

清理策略​

  • 本地临时文件只保证在宿主当前生命周期内有效,一旦宿主被关闭就可能被清理,即下次冷启动不保证可用。
  • 本地缓存文件和本地用户文件的清理时机跟代码包一样,只有在代码包被清理的时会被清理。