分类: 嵌入式
2012-04-13 16:22:48
这些目录在不同的系统(pc/android/mac)中都是不尽相同的,无论你的程序是在那种环境中,你都必须要正确的构造合适的数据存储文件URI,才能保证数据文件可用。
首先我们需要关注 File.applicationDirectory,因为这个目录其实是反映你打包时的状态,我们知道AIR程序的打包主要是由这样一些部分构成的(除了一系列标准的描述元数据外):
1. 一个swf主程序文件
2. 系列swf主程序以外的各类资源(可以是其他包括swf在内支持可用的任何数据文件)
所以我们要在主程序中能够正确的访问到相应资源,就可以利用
File.applicationDirectory.resolvePath("资源相对于打包根目录的URI") 这样的形式来构造资源的真实URI,然后才去访问。注意这里采用的是标准方法resolvePath,它可以自行处理不同环境下路径分隔符不同的问题。至此对外部资源的访问是可行的了。
对于数据的存储(比如缓存一系列状态/或者联网程序下载一些元数据进入数据库存储)却不能采用File.applicationDirectory.resolvePath("存储资源URI"),这是因为File.applicationDirectory对AIR程序来说是不能保证可写的,必须要避免这样的使用,这时应该用File.applicationStorageDirectory.resolvePath("存储资源URI")来构造可写的资源存储实体文件URI,去进行写入操作。不过需要说明的是这个目录不建议进行大数据量的写入,如果是大数据量的写入建议以File.desktopDirectory 或者 File.documentsDirectory 或者File.userDirectory为基础连接构造文件存储URI。
此外一个技巧是对于复杂文件结构的二进制文件,例如数据库文件(有一定的数据结构),可能需要采用如下机制来建立可写的文档URI:
1. 在资源打包时打包一个拥有结构的空数据库文件;
2. 在首次运行时把File.applicationDirectory.resolvePath("空数据库文件相对URI")复制一个到File.applicationStorageDirectory.resolvePath("数据存储资源URI")
3. 以后的读写都是对File.applicationStorageDirectory.resolvePath("数据存储资源URI")进行了[严格来说是先检查是否有File.applicationStorageDirectory.resolvePath("数据存储资源URI"),如果没有就先执行2步骤]