使用 Flash Actionscript 3.0 从 Android 移动设备保存和加载文件

Saving and Loading files from an Android mobile Device using Flash Actionscript 3.0

我正在为桌面和 Android 制作 Test Maker 应用程序。我能够在 Desktop 中保存和加载,但在 Android 上失败了。我只能保存我的文件,但我无法加载我保存的文件。 Android 设备显示 "No files were found"。它甚至不打开文件浏览器。我所做的保存和加载类型是用户可以实际查找并打开他的项目的类型。我目前正在使用 FileReference 来执行此操作。它适用于桌面设备,但不适用于 Android 移动设备。有人可以帮我吗?

我敢肯定你不能在移动设备上使用 FileReference(尽管有人可以随时纠正我的错误)。

在移动设备上,您应该为 loading/saving 本地文件使用 File & FileStream 类。

这是一个示例,使用您可以创建的编译时间常量(以确定是桌面还是 AIR)并适当地加载和加载名为 textfield:

的文本字段
CONFIG::air {
    var file:File = File.applicationStorageDirectory.resolvePath("myFile.txt");

    if(file.exists){
        var stream:FileStream = new FileStream();
        stream.open(file, FileMode.READ);

        textfield.text = stream.readUTF(); //this may need to changed depending what kind of file data you're reading

        stream.close();
    }else{
        data = "default value"; //file doesn't exist yet
    }
}

CONFIG::desktop {
    //use your file reference code to populate the data variable
}

并保存:(假设您有一个要保存其文本的文本字段)

var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeUTF(textfield.text);
fileStream.close();

除了writeUTF(用于纯文本)之外还有其他保存方法writeObjectflash.net.registerClassAlias

结合使用可以很好地保存自定义对象

文件 类 在 flash.filesystem 包中

编辑

您可以尝试让用户在 AIR 上选择位置。

var file:File = File.applicationStorageDirectory;
file.addEventListener(Event.SELECT, onFileSelected);
file.browseForOpen("Open Your File", [new FileFilter("Text Files", "*.txt")]);

function onFileSelected(e:Event):void {
    var stream:FileStream = new FileStream();
    stream.open(e.target as File, FileMode.READ);

    textField.text = stream.readUTF();
}

var saveFile:File = File.applicationStorageDirectory.resolvePath("myFile.txt");
saveFile.addEventListener(Event.SELECT, onSaveSelect);
saveFile.browseForSave("Save Your File");

function onSaveSelect(e:Event):void {
    var file:File = e.target as File;

    var stream:FileStream = new FileStream();
    stream.open(file, FileMode.WRITE);
    stream.writeUTF(textField.text);
    stream.close();
}