Ogni file è impostato su un set di byte in un disco. In ActionScript, i dati di un file possono essere sempre rappresentati come ByteArray. Ad esempio, il codice seguente legge i dati da un file in un oggetto ByteArray denominato
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);
}
Ad esempio, il codice seguente scrive i dati da un ByteArray denominato
bytes
in un file:
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);
Tuttavia, spesso non si vuole memorizzare i dati in un oggetto ByteArray di ActionScript. E spesso il file di dati è in un formato file specificato.
Ad esempio, i dati nel file possono essere in un formato file di testo ed è possibile rappresentare tali dati in un oggetto String.
Per tale motivo, la classe FileStream comprende metodi di lettura e scrittura per la lettura e la scrittura di dati da e in tipi diversi da oggetti ByteArray. Ad esempio, il metodo
readMultiByte()
consente di leggere dati da un file e memorizzarli in una stringa, come nel codice seguente:
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");
}
Il secondo parametro del metodo
readMultiByte()
specifica il formato testo che ActionScript utilizza per interpretare i dati ("iso-8859-1" nell'esempio). ActionScript supporta codifiche di set di caratteri comuni (vedete
Set di caratteri supportati
).
La classe FileStream comprende inoltre il metodo
readUTFBytes()
che legge i dati dal buffer di lettura in una stringa che utilizza il set di caratteri UTF-8. Poiché i caratteri nel set di caratteri UTF-8 hanno una lunghezza variabile, non utilizzate
readUTFBytes()
in un metodo che risponde all'evento
progress
perché i dati al termine del buffer di lettura possono rappresentare un carattere incompleto. (Il che è anche vero quando si utilizza il metodo
readMultiByte()
con una codifica di caratteri a lunghezza variabile.) Per tale motivo, leggete l'intero set di dati quando l'oggetto FileStream invia l'evento
complete
.
Vi sono inoltre metodi di scrittura simili,
writeMultiByte()
e
writeUTFBytes()
, per operazioni con oggetti String e file di testo.
I metodi
readUTF()
e
writeUTF()
(da non confondere con
readUTFBytes()
e
writeUTFBytes()
) leggono e scrivono anche i dati di testo in un file, ma ipotizzano che tali dati siano preceduti da quelli che specificano la lunghezza dei dati di testo, il che non è comune nei file di testo standard.
Alcuni file di testo codificati con UTF iniziano con un carattere "UTF-BOM" (byte order mark) che definisce l'endiannes, nonché il formato di codifica (come UTF-16 o UTF-32).
Per un esempio di lettura e scrittura di un file di testo, consultate
Esempio: lettura di un file XML in un oggetto XML
.
I metodi
readObject()
e
writeObject()
sono metodi utili per memorizzare e recuperare i dati per oggetti ActionScript complessi. I dati vengono codificati in AMF (ActionScript Message Format). Adobe AIR, Flash Player, Flash Media Server, e Flex Data Services includono API per l'utilizzo di dati in questo formato.
Vi sono altri metodi di lettura e scrittura (come
readDouble()
e
writeDouble()
). Tuttavia, se vengono utilizzati, assicuratevi che il formato file corrisponda ai formati dei dati definiti da questi metodi.
I formati file sono spesso più complessi dei semplici formati di testo. Ad esempio, un file MP3 comprende dati compromessi che possono essere interpretati solo con algoritmi di decompressione e decodifica specifici dei file MP3. I file MP3 possono anche includere tag ID3 che contengono informazioni di metatag sul file (come il titolo e l'artista di un brano). Vi sono più versioni del formato ID3, ma il più semplice (versione ID3 1) è riportato nella sezione
Esempio: lettura e scrittura di dati con accesso casuale
.
Altri formati di file (per immagini, database, documenti applicativi e altro) hanno strutture differenti e per operare con i loro dati in ActionScript, è necessario comprendere come sono strutturati i dati.