Alla filer består av en uppsättning byte på en disk. I ActionScript kan data från en fil alltid representeras som en ByteArray. Följande kod läser data från en fil till ett ByteArray-objekt med namnet
bytes
:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completeHandler);
myFileStream.openAsync(myFile, FileMode.READ);
var bytes:ByteArray = new ByteArray();
function completeHandler(event:Event):void
{
myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable);
}
Följande kod skriver på ett liknande sätt data från ett ByteArray-objekt med namnet
bytes
till en fil:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.open(myFile, FileMode.WRITE);
myFileStream.writeBytes(bytes, 0, bytes.length);
Ofta vill du emellertid inte lagra data i ett ByteArray-objekt i ActionScript. Och ofta är filen i ett visst filformat.
Data i filen kan till exempel vara i ett textfilsformat, och du vill representera sådana data i ett String-objekt.
Därför omfattar klassen FileStream read- och write-metoder för läsning och skrivning av data till och från andra typer än ByteArray-objekt. Med till exempel metoden
readMultiByte()
kan du läsa data från en fil och lagra den i en sträng, som i följande kod:
var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
var myFileStream:FileStream = new FileStream();
myFileStream.addEventListener(Event.COMPLETE, completed);
myFileStream.openAsync(myFile, FileMode.READ);
var str:String = "";
function completeHandler(event:Event):void
{
str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1");
}
Den andra parametern för metoden
readMultiByte()
anger textformatet som ActionScript använder för att tolka data (”iso-8859-1” i exemplet). Adobe AIR stöder kodning med vanliga teckenuppsättningar (se
Teckenuppsättningar som stöds
).
Klassen FileStream omfattar också metoden
readUTFBytes()
, som läser data från läsbufferten till en sträng med hjälp av teckenuppsättningen UTF-8. Eftersom tecknen i teckenuppsättningen UTF-8 har olika längd ska du inte använda
readUTFBytes()
i en metod som svarar på
progress
-händelsen, eftersom data i slutet av läsbufferten kan representera ett ofullständigt tecken. (Detta gäller också när du använder metoden
readMultiByte()
med teckenkodning med variabel längd.) Därför ska du läsa hela datauppsättningen när FileStream-objektet skickar händelsen
complete
.
Det finns också liknande write-metoder,
writeMultiByte()
och
writeUTFBytes()
, med vilka du kan arbeta med String-objekt och textfiler.
Metoderna
readUTF()
och
writeUTF()
(som inte ska blandas ihop med
readUTFBytes()
och
writeUTFBytes()
) läser och skriver också textdata till en fil, men de förutsätter att textdata föregås av information som anger längden på textdata, något som är ovanligt i vanliga textfiler.
Vissa UTF-kodade textfiler inleds med ett ”UTF-BOM”-tecken (byteordningsmarkör) som definierar graden av endian samt kodningsformatet (till exempel UTF-16 eller UTF-32).
Ett exempel på hur du läser och skriver till en textfil finns i
Exempel: Läsa en XML-fil till ett XML-objekt
.
readObject()
och
writeObject()
är praktiska när du vill lagra och hämta data för komplicerade ActionScript-objekt. Data kodas i AMF (ActionScript Message Format). Adobe AIR, Flash Player, Flash Media Server och Flex Data Services innehåller API:er för att arbeta med data i det här formatet.
Det finns några andra read- och write-metoder (till exempel
readDouble()
och
writeDouble()
). Om du använder dessa måste du emellertid se till att filformatet motsvarar formatet på de data som definieras av dessa metoder.
Filformat är ofta mer komplicerade än enkla textformat. En MP3-fil innehåller till exempel komprimerade data som bara kan tolkas med dekomprimerings- och avkodningsalgoritmer som bara gäller för MP3-filer. MP3-filer kan också inkludera ID3-koder som innehåller metatagginformation om filen (till exempel titel och artist för en låt). Det finns flera versioner av ID3-formatet, men den enklaste (ID3 version 1) beskrivs i avsnittet
Exempel: Läsa och skriva data med direktåtkomst
.
Andra filformat (för bilder, databaser, programdokument och så vidare) har andra strukturer, och för att kunna arbeta med deras data i ActionScript måste du förstå hur dessa data struktureras.