【问题标题】:Is it possible to embed all files from a folder?是否可以嵌入文件夹中的所有文件?
【发布时间】:2011-09-05 11:14:45
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 为什么一定要嵌入;而不是在运行时加载?为什么需要这么多不同的文件?
  • 为什么重要?我只是想知道这是否可能。 :)
  • @roberkules 对我来说,这听起来像是架构/方法的问题。但是,任何开发决策总是需要权衡取舍,因此我无法确定“为什么”。
  • 架构是否好不是问题的一部分。直截了当的问题 - 是否可能(如果是,如何)。
  • @roberkules 是的,当然可以;您已经有了一种在答案中加载多个 XML 文件的解决方案。这不是“有可能”风格的问题。

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


【解决方案1】:

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

  • Flex 编译器扩展(更多细节herehere)。通过这种方式,您可以预处理代码并嵌入元数据。该解决方案可以由注释(元标记)驱动。
  • 蚂蚁脚本。
  • 您自己的命令行脚本。

【讨论】:

  • 我正在使用 ANT 构建项目。使用 ANT 的可能解决方案是什么样的?
  • 我个人不喜欢 Ant,但我可以建议您使用 Ant Contrib 的 Foreach task 来遍历您目录中的 XML 文件并获取它们的名称。然后我建议你使用ReplaceRegExp task 将你的特殊元标记注释代码替换为生成的行。
  • 在看到这个答案并考虑一下之后;我回来支持它。我认为 ANT 脚本方法是一个非常有创意的解决方案。
【解决方案2】:

我不认为有办法做这样的事情:

[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);
                }
            }
        }

    }
}

此示例将显示嵌入 files.zip 中包含的所有 XML 文件内容

【讨论】:

猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多