是否可以嵌入文件夹中的所有文件?

时间:2011-05-31 12:32:15

标签: flash flex actionscript-3 embed flash-builder

我想嵌入给定文件夹的所有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加载它们不是一种选择。

有什么想法吗?

2 个答案:

答案 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)

我只能建议你编写某种代码生成脚本。可以有以下选项:

  • Flex编译器扩展程序(更多详情herehere)。这样您就可以预处理代码并嵌入元数据。解决方案可以是注释(元标记)驱动。
  • Ant脚本。
  • 您自己的命令行脚本。