Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Leggere dati da un file di testo

Estrarre ed utilizzare i dati di un file
Estrarre ed utilizzare i dati di un file
Link copiato negli appunti

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 log
  • applicationResourceDirectory - Restituisce la cartella di installazione del programma
  • desktopDirectory - Restituisce la cartella del desktop dell'utente
  • documentsDirectory - Restituisce la cartella Documenti
  • userDirectory - 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:

Figura 1. Il testo ricavato dal file esterno

Screenshot del programma

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.

Ti consigliamo anche