[英]Autosaving to xml using fileReference.Save without having a Save As dialog come up
我正在尝试将从我的应用程序内部收集的数据保存到随附的名为data.xml
外部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
是FileStream
的方法(尤其是要在iOS的Air上部署它),但是我不知道如何实现它。
有任何想法吗?
编辑:我已经用下面的建议更新了我的问题,但是它仍然不起作用。 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;
FileReference
类对于Web浏览器是安全的,因为在未经用户同意的情况下,它不会让您弄乱用户文件。
但是,当您使用AIR时,可以使用扩展FileReference
的File
类。
查看此链接以了解它们之间的区别。
这是使用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
/ FileReference
加载xml数据,如下所示:
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
}
如您所见,一旦我们在文件系统中获得对文件的引用,就可以自由地从文件中读取/写入数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.