Abbiamo visto come caricare un file presente sul pc dell'utente, ma come regolarci se volessimo ad esempio recuperare delle informazioni presenti su un file di testo? In questo caso utilizzeremo ancora una volta la classe File
, ma verrà abbinata alle classi FileMode
e FileStream
.
Apriamo il blocco note, creiamo un file di testo di nome "letturaFileAir.txt", scriviamoci dentro un testo a piascere e salviamolo nella cartella "Documenti" del nostro computer.
A questo punto possiamo utilizzare i comandi Actionscript di AIR per andare a recuperare questo file: la prima cosa da fare è ricavare il percorso della cartella Documenti, che cambia da computer a computer. AIR mette a disposizione delle costanti, ovvero delle stringhe che permettono di risalire sempre con certezza ad un determinato percorso in quanto cambieranno automaticamente valore in base al sistema su cui sono installate.
Le costanti offerte da AIR sono:
applicationStorageDirectory
- Restituisce una cartella dove poter memorizzare settaggi o file di logapplicationResourceDirectory
- Restituisce la cartella di installazione del programmadesktopDirectory
- Restituisce la cartella del desktop dell'utentedocumentsDirectory
- Restituisce la cartella DocumentiuserDirectory
- Restituisce la cartella dell'utente (su Windows solitamente è C:/Documents and Settings/nome utente)
Ad esempio documentsDirectory sul pc dove il nome utente è Davide restituirà C:/Documents and Settings/Davide/Documenti
, mentre su un pc dove il nome utente è Orazio, restituirà C:/Documents and Settings/Orazio/Documenti
. Tale percorso può essere ricavato con la proprietà nativePath
di ogni costante.
Vediamo il codice per recuperare e leggere il nostro file; per prima cosa dobbiamo importare le classi contenute nel package flash.filesystem
, così:
import flash.filesystem.*;
Quindi prepariamo la funzione che andrà ad aprire il file
private function inizia():void {
// Recupera il file dalla cartella Documenti
var file = File.documentsDirectory.resolvePath("provaLetturaAIR.txt");
// Crea un oggetto fileStream e apre il file in sola lettura
var stream:FileStream = new FileStream();
stream.openAsync( file, FileMode.READ );
// Imposta l'evento in modo che quando il file è caricato venga eseguita la funzione analizza
stream.addEventListener( Event.COMPLETE, analizza );
}
Notiamo l'uso del comando openAsync
. Esistono due modi per aprire un file, sincrono ed asincrono. Il primo metodo blocca il resto del codice finchè il file non è aperto, quindi esegue i comandi successivi, mentre il metodo asincrono permette di eseguire altri comandi e utilizza un evento per sapere quando il file è stato caricato, è quindi solitamente consigliato specialmente per file di grosse dimensioni.
Vediamo infine la funzione analizza:
private function analizza( evt:Event ):void {
// Recupera il file che ha lanciato l'evento come oggetto FileStream
var stream:FileStream = evt.target as FileStream;
// Ne legge il contenuto e lo memorizza come stringa
var contenuti:String = stream.readUTFBytes(stream.bytesAvailable);
// il testo viene mostrato in un campo di testo
testo.text = contenuti;
// L'oggetto FileStram viene chiuso
stream.close();
}
testo.text
ci serve per mostrare il contenuto del file; testo potrebbe essere un componente Text creato in Flex e che avrebbe il seguente codice
<mx:Text x="34" y="77" text="Text" width="241" height="105" id="testo" />
Il risultato testando l'applicazione:
Lo stesso risultato se avessimo utilizzato il metodo sincrono e non quello sincrono avrebbe richiesto il seguente codice:
private function inizia():void {
var file:File = File.documentsDirectory.resolvePath("letturaFileAIR.txt");
var stream:FileStream = new FileStream();
stream.open( file, FileMode.READ );
var contenuti:String = stream.readUTFBytes( stream.bytesAvailable )
testo.text = contenuti;
stream.close();
}
Notiamo la mancanza dell'evento e l'utilizzo del comando open
al posto di openAsync
.
Il codice usato negli esempi è utilizzabili sia con Flex che con Flash CS3.
La lettura di file in AIR è semplice, sia se carichiamo dati o immagini scelti dall'utente (e in questo caso i componenti preimpostati di Flex facilitano notevolmente il lavoro), sia qualora ricaviamo informazioni da file di testo preimpostati.
In questo caso il file .txt da caricare è stato creato manualmente, ma è anche possibile scrivere file direttamente da AIR e questo torna utile per realizzare ad esempio dei file di configurazione di un'applicazione: vedremo nella prossima lezione come sfruttare i comandi Actionscript e le classi File
, FileStream
e FileMode
per scrivere informazioni su un file.