2011-10-14 13 views
3

我試圖將單個單詞保存到文件中,然後閱讀該單詞以確認成功。當讀取文件的代碼運行時,它不返回任何數據。而且,我無法驗證是否創建了任何文件。如何保存到文件?在iOS上使用AS3(初學者)

下面是代碼:

// 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; 

任何幫助,將不勝感激:)

回答

3

我會嘗試一些診斷的東西,但我可以下注猜測,爲什麼你看到的是問題。

但首先,我會嘗試設置feedback.textmyFile.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()就是要走的路。

如果文件大小實際上是零,那麼我將不得不多挖一點,看看發生了什麼。

+0

感謝你了。我嘗試切換到readUTF並且它第一次工作。而且,你的解釋也很有幫助。我對使用ActionScript很感興趣,但仍有很多東西需要學習。 –

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(); 

別謝我,謝雷:source