我想嵌入给定文件夹的所有xml文件。现在我正在做这样的事情:
[Embed(source="../somefolder/file1.xml", mimeType="application/octet-stream")]
private var MyClass1:Class;
[Embed(source="../somefolder/file2.xml", mimeType="application/octet-stream")]
private var MyClass2:Class;
[Embed(source="../somefolder/file3.xml", mimeType="application/octet-stream")]
private var MyClass3:Class;
和
var file:XML;
var bytes:ByteArray;
switch (fileId) {
case 1:
bytes = new MyClass1();
break;
case 2:
bytes = new MyClass2();
break;
case 3:
bytes = new MyClass3();
break;
}
file = new XML(bytes.readUTFBytes(bytes.length));
XML文件列表将增长到10多个文件,因此我正在寻找一种更优雅,更动态的方式来嵌入这些文件。
文件应嵌入编译中,通过URLLoader加载它们不是一种选择。
有什么想法吗?
答案 0 :(得分:6)
我认为没有办法做类似的事情:
[Embed(source="../somefolder/*", mimeType="application/octet-stream")]
但您可以使用Zip文件并访问其内容。我经常使用http://nochump.com/blog/archives/15来做这件事:
package
{
import flash.display.Sprite;
import flash.utils.ByteArray;
import nochump.util.zip.ZipEntry;
import nochump.util.zip.ZipFile;
public class TestTextfield extends Sprite
{
[Embed(source="files.zip", mimeType="application/octet-stream")]
private var zipContent:Class;
public function TestTextfield()
{
var zip : ZipFile = new ZipFile(new zipContent);
for each(var entry : ZipEntry in zip.entries)
{
var entryContent : ByteArray = zip.getInput(entry);
if(entry.name.indexOf(".xml") != -1)
{
var xmlContent : XML = new XML(entryContent.readUTFBytes(entryContent.bytesAvailable));
trace("File " + entry.name +" :\n" + xmlContent);
}
}
}
}
}
此示例将显示embeded files.zip
中包含的所有XML文件内容答案 1 :(得分:4)