访问ActionScript库项目中的资产/资源文件

时间:2013-12-09 12:26:38

标签: actionscript-3 air flash-builder

我正在使用ActionScript库项目在Mobile和桌面ActionScript项目之间共享代码和资源/资源。

通过“库路径”选项卡上的“添加项目”选项将库项目添加到其他两个项目中,链接类型为“合并到代码”,其中的所有类都可以通过其他项目,并正常工作。

但是它包含一个SQLite数据库文件,我想在第一次加载应用程序时将其复制到目标系统上的File.applicationStorageDirectory,我不知道如何获取对该文件的引用在图书馆项目中将其复制出来。

db文件的位置是:LibraryProj - src/database/dbFile.db我想使用File.applicationDirectory然后一个路径'into'到swf会让我访问它,但以下测试都没有说文件存在。

var test:File;

test = File.applicationDirectory.resolvePath("app:/src/database/dbFileDb.db"); 
trace("test.exists==" + test.exists); 

test = File.applicationDirectory.resolvePath("src/database/dbFileDb.db"); 
trace("test.exists==" + test.exists);
test = File.applicationDirectory.resolvePath("database/dbFileDb.db"); 
trace("test.exists==" + test.exists); 
test = File.applicationDirectory.resolvePath("dbFileDb.db"); 
trace("test.exists==" + test.exists);

这是将资源/资产文件从包含合并库的swf复制到应用程序的存储目录中的正确方法吗?是否有可能以这种方式从图书馆项目共享资源/资产?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

在做了一些关于在AS3中使用[Embed]标签的研究之后,我现在已经知道这是我应该用来使文件可用于消费项目(我之前只使用过)它用于图像,并没有考虑到其他文件类型。)

[Embed('igniteDb.db', mimeType="application/octet-stream")]
public static const myReferenceDbFile:Class;

使用以下代码将文件复制到File.applicationStorageDirectory我。它将嵌入文件转换为字节数组,然后通过FileStream类将其写入目标文件。

//write the embedded database file data into app user files directory
var bundleDbBytes:ByteArray;
bundleDbBytes = new myReferenceDbFile();//gets a reference to the embedded db file

var outputDbFile:File = File.applicationStorageDirectory.resolvePath(DB_FILE_NAME);
var fileStream:FileStream = new FileStream();
fileStream.open(outputDbFile, FileMode.UPDATE);
fileStream.writeBytes(bundleDbBytes);
fileStream.close();

嘿,presto,数据库已经可以使用了。