0

我正在尝试将从我的应用程序中收集的数据保存到它随附的名为data.xml. 我正在使用该fileReference.save方法,但它似乎并没有完成这项工作:

function parseXML(xmlData:XML):void
{
    trace("Parsing:");
    trace("-----------------");
    var itemIndex:uint = event.currentTarget.index;
    delete data.item[itemIndex];
    fileReference.save(data, "data.xml");
    trace(xmlData);
}

不幸的是,这会导致弹出一个“另存为”对话框,询问用户他们希望将 xml 文件保存在哪里(当我真正想要发生的是项目目录中的 data.xml 文件被自动覆盖时用户有任何发言权)。

我听说这FileStream是要走的路(尤其是我要在 Air for iOS 上部署它),但我不知道如何实现它。

有任何想法吗?

编辑:我已经用下面的建议更新了我的问题,但它仍然不起作用。该data.xml文件位于我的桌面上名为“RecipeMatcher2”的同一目录中,即/Desktop/RecipeMatcher2/(我使用的是Mac OS X),但我也希望它解析为文件在iPhone上存储的任何路径。

function parseXML(xmlData:XML):void
{
    trace("Parsing:");
    trace("-----------------");
    var itemIndex:uint = event.currentTarget.index;
    file = File.applicationStorageDirectory;
    file = file.resolvePath("data.xml");
    delete data.item[itemIndex];
    var writeStream:FileStream = new FileStream();
    writeStream.open(file, FileMode.WRITE);
    writeStream.writeUTFBytes(data.toXMLString());
    writeStream.close();
    trace('xml file saved');
}

我最初像这样加载我的 xml 数据:

loader = new URLLoader();
// listens to see if data has fully loaded//
loader.addEventListener(Event.COMPLETE, dataLoaded);
//loads local xml file with URLrequest method//
loader.load(new URLRequest("data.xml"));

这是我与这个问题相关的公共变量:

public var loader:URLLoader;
public var file:File;
public var data:XML;
public var items:XMLList;
4

1 回答 1

1

FileReference课程对于网络浏览器是安全的,因为它不会让您在未经他同意的情况下弄乱用户文件。

但是,当您使用 AIR 时,您可以使用File扩展FileReference.
查看此链接以了解它们之间的区别。

以下是使用FileStream该类的方法:

var file:File = new File().resolvePath("myFile.txt");

var stream:FileStream = new FileStream();
stream.open(file, FileMode.WRITE);
stream.writeUTF("Hello world!");
stream.close();

您可以在此处阅读有关FileStream 类的更多信息。


编辑:查看您当前编辑的问题,我建议您使用File/加载 xml 数据FileReference,如下所示:

private var file:File = new File();

private function loadFile():void 
{
    file.addEventListener(Event.COMPLETE, onFileComplete);
    file.resolvePath("data.xml"); // Or whatever your file is located
    file.load();
}

private function saveFile():void 
{
    var writeStream:FileStream = new FileStream();
    /*
     * FileMode.WRITE will truncate (empty) the file on open.
     * FileMode.APPEND will open the file "as is" and write in the end of it.
     */
    writeStream.open(file, FileMode.WRITE);
    writeStream.writeBytes(data); // Any other write method can be used
    writeStream.close();
}

private function onFileComplete(event:Event):void 
{
    var xml:XML = XML(file.data); // Your XML is here!
    parseXML(xml); // Do your stuff here
}

如您所见,一旦我们在文件系统中获得对文件的引用,我们就可以自由地从/向它读取/写入数据。

于 2013-04-22T05:13:21.407 回答