我正在尝试将单个单词保存到文件中,然后读取该单词以确认成功。当运行读取文件的代码时,它不返回任何数据。而且,我无法验证是否已创建任何文件。
以下是代码:
// 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;
非常感谢任何帮助:)
答案 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