如何保存到文件?在iOS上使用AS3(初学者)

时间:2011-10-14 11:22:05

标签: ios actionscript-3 file

我正在尝试将单个单词保存到文件中,然后读取该单词以确认成功。当运行读取文件的代码时,它不返回任何数据。而且,我无法验证是否已创建任何文件。

以下是代码:

// This is run at the beginning of the frame, and this does display Hello in a textArea

var str:String = "Hello\n";
feedback.text = str;



// This is run when the user taps a button

var myFile:File = File.applicationStorageDirectory.resolvePath("./eFiveV3/text.txt");

var fileStream:FileStream = new FileStream();


fileStream.open(myFile,FileMode.WRITE);

fileStream.writeUTF(str);

fileStream.close();

str = "Goodbye\n";


// if the code below is run, then the feedback box will be empty. if the code below is commented out, then the feedback box will contain the text: Goodbye

fileStream.open(myFile,FileMode.READ);

str = fileStream.readMultiByte(myFile.size,File.systemCh arset);

fileStream.close();

feedback.text = str;

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:3)

我会尝试几种诊断方法,但我可以猜测为什么你会看到这个问题。

但首先,我会尝试将feedback.text设置为myFile.size.toString()并查看它是否表示文件中有任何字节。如果那回来了一些> 0然后我会打赌以下情况继续:

您在编写字符串时使用writeUTF(),但在重新读取字符串时使用readMultiByte()。当您使用writeUTF()时,它不只是将字符串写入直接使用文件,它以字符串的长度(作为16位整数)为前缀,其中readMultiByte()试图将这些字节直接强制转换为具有给定字符集的字符串。开头的那些额外字节可能导致readMultiByte()失败或搞砸(它会尝试阅读0x06,0x00,0x00,0x00,H,e,l,l,o,\n而不仅仅是H,e,l,l,o,\n)。 writeUTF()可用于将多个字符串写入同一文件,然后使用readUTF()将其从流中读回。

您可能希望将读取和写入方法配对正确,使用writeUTF()readUTF()或使用writeMultiByte()readMultiByte()。如果您正在尝试编写纯文本文件,那么writeMultiByte()将成为可行的方法。如果您尝试将一堆不同的数据序列化到一个文件中,那么writeUTF()就可以了。

如果文件大小实际为零,那么我将不得不再挖一点,看看有什么事情发生。

答案 1 :(得分:1)

这是一些代码,其中包含一些事件侦听器,用于验证文件何时被写入和读取。

function saveFile():void{  

    var file:File = File.documentsDirectory.resolvePath("text.txt");

    var fileStream:FileStream = new FileStream();  

    fileStream.openAsync(file, FileMode.WRITE);  
    fileStream.writeUTFBytes("Hi this file was saved from AIR application without dialog");  
    fileStream.addEventListener(Event.CLOSE, fileClosed);  
    fileStream.close();  

    function fileClosed(event:Event):void { 

        trace("File Saved");  

    }        
}  

function readFile():void{  

    var file:File = File.documentsDirectory.resolvePath("text.txt");

    var fileStream:FileStream = new FileStream();  

    fileStream.openAsync(file, FileMode.READ);  
    var str:String = fileStream.readMultiByte(file.size,File.systemCharset);
    fileStream.addEventListener(Event.CLOSE, fileClosed);  
    fileStream.close();  

    function fileClosed(event:Event):void { 

        trace("File Contents:" + str);  

    }        
} 

saveFile();

readFile();

不要感谢我,谢谢Ray:source