如何在Adobe Flash开发的Adobe Air(安卓)应用中嵌入文本文件
嘿,我之前在做AIR安卓项目时刚好碰到过类似的需求,给你分享几个实用的方案,亲测有效:
方法一:将文本文件打包进AIR应用的资源目录(推荐)
这是最常用的静态资源嵌入方式,适合大容量文本数据:
- 首先把你的文本数据文件(比如
data.txt)放到Flash项目的源文件目录里(和你的.fla或主AS文件同层级即可) - 根据你用的开发工具,确保文件被纳入打包列表:
- 如果你用Animate:打开「发布设置(AIR for Android)」,切换到「文件」标签,点击「添加文件」选中你的文本文件,这样打包APK时它会被自动包含进去
- 如果你用Flash Builder:右键项目→「属性」→「Flex Build Packaging」→「AIR Android」→「打包」标签,在「要打包的文件」里添加该文本,设置「打包类型」为「嵌入的资源」
- 然后在ActionScript里读取这个文件,因为它已经在应用的安装目录下,用
File类就能直接访问:
import flash.filesystem.File; import flash.filesystem.FileStream; import flash.events.Event; // 获取应用安装目录下的文本文件 var dataFile:File = File.applicationDirectory.resolvePath("data.txt"); var fileStream:FileStream = new FileStream(); // 异步读取文件(避免阻塞UI) fileStream.addEventListener(Event.COMPLETE, onDataLoaded); fileStream.openAsync(dataFile, FileMode.READ); function onDataLoaded(e:Event):void { var stream:FileStream = e.target as FileStream; // 读取全部文本内容 var textContent:String = stream.readUTFBytes(stream.bytesAvailable); stream.close(); // 这里就可以处理你的数据了,比如解析JSON/XML trace("加载完成,数据长度:" + textContent.length); }
方法二:直接把文本数据嵌入到ActionScript类中(适合小体量数据)
如果你的文本数据不算太大,也可以省去文件读取步骤,直接把内容硬编码到AS类里:
// 创建一个专门存常量的类 package { public class AppData { // 把你的文本数据直接粘贴在这里 public static const STATIC_DATA:String = "你的全部文本内容..."; } }
之后在需要用数据的地方直接调用AppData.STATIC_DATA就行,这种方式启动就能用,不需要IO操作,但缺点是数据修改需要重新编译,且会增加SWF体积。
额外提醒
applicationDirectory是只读目录,刚好符合你「嵌入应用内、启动调用」的需求,因为安装后这里的文件不会被修改,非常适合存静态数据- 如果你的文本是JSON/XML格式,读取到字符串后可以用
JSON.parse()或者XML(textContent)转换成对应的数据结构,处理起来更方便 - 打包时一定要确认文本文件没有被排除,有些工具默认不会包含非SWF/AS的文件,手动添加很关键
内容的提问来源于stack exchange,提问作者Koby.G




