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

Salvare dati su file

Salvare i dati su un file specificando la posizione
Salvare i dati su un file specificando la posizione
Link copiato negli appunti

Dopo aver trattato la lettura dei file presenti sul PC dell'utente, passiamo a parlare di come scrivere dei file.

La scrittura di file in un'applicazione si può rilevare utile per molteplici motivi: dal salvataggio delle preferenze dell'utente alla possibilità di esportare dei dati dal programma al PC, così da poterli visualizzare a parte, stampare o altro.

Per la scrittura dei file si utilizza sempre la classe FileStream di cui già abbiamo parlato per le fasi di lettura, si utilizzano però ovviamente metodi e comandi differenti.

Scrivere un file con Actionscript

Chiunque ha utilizzato Flex o Flash sa che con questi software non è possibile scrivere file e bisogna affidarsi a soluzioni esterne, sia in ambito web che in ambito desktop; anche in questo caso ci si affida a una soluzione "esterna", in quanto AIR è di fatto una aggiunta a Flex/Flash, ma abbiamo un grosso vantaggio poiché la soluzione è già integrata nel software e soprattutto si può sfruttare la familiare sintassi Actionscript per eseguire l'operazione di scrittura, senza dover quindi usare comandi di altri linguaggi o software.

Se vogliamo scrivere un file per prima cosa dobbiamo decidere in quale cartella andrà salvato: a tal proposito tornano sicuramente utili le costanti di cui già abbiamo parlato nella lezione precedente.

È abbastanza comune che per i file relativi alle preferenze di un'applicazione venga sfruttata la userDirectory e alcune sue sottocartelle (basti pensare che lo stesso Flash adotta questo metodo), mentre per quanto riguarda l'esportazione di file dall'applicazione al PC potrebbe essere più comodo per l'utente trovare i file sul desktop, oppure all'interno della cartella documenti.

Una volta stabilita la cartella in cui scrivere il file, possiamo passare alla scrittura vera e propria del file. Dovremo quindi impostare il nome del file, creare eventualmente una variabile in cui inserire i dati da scrivere (se i dati sono molti è decisamente consigliato) ed infine andare ad inserire i dati nel file. Tutto questo è fattibile con poche linee di codice:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
  applicationComplete="inizia()">

  <mx:Script>
    <![CDATA[
      import flash.filesystem.*
      
      private function inizia():void{
        var cartella:File = File.documentsDirectory
        var file:File = cartella.resolve("ScrivoFile.txt")
        var scrivi:FileStream = new FileStream()
        scrivi.open(file,FileMode.WRITE)
        scrivi.writeUTFBytes("Prova di scrittura di un file")
        scrivi.close()
      }
    ]]>
  </mx:Script>
</mx:WindowedApplication>

Il codice va a ricavare il percorso della cartella Documenti e imposta il file ScrivoFile.txt, quindi viene creato un oggetto FileStream; notiamo come questa parte sia uguale al codice utilizzato per la lettura dei file.

In questo caso però il metodo open ha come secondo parametro FileMode.WRITE, ovvero l'apertura in modalità di scrittura.

Come ultime operazioni abbiamo la scrittura del testo "Prova di scrittura di un file" all'interno del documento creato e la chiusura del FileStream.

In questo caso abbiamo inserito i dati da scrivere direttamente nel comando, ma come già accennato, soprattutto se i dati sono tanti, è meglio affidarsi ad una o più variabili.

Avviamo l'applicazione e portiamoci nella cartella Documenti: dovremmo trovare il file creato e contenente il testo impostato nel codice Actionscript.

Lo stesso codice Actionscript è utilizzabile in Flash CS3, in questo modo:

import flash.filesystem.*

var cartella:File = File.documentsDirectory
var file:File = cartella.resolve("ScrivoFile.txt")
var scrivi:FileStream = new FileStream()
scrivi.open(file,FileMode.WRITE)
scrivi.writeUTFBytes("Prova di scrittura di un file")
scrivi.close()

Metodo sincrono e metodo asincrono

Poiché viene utilizzato quasi lo stesso metodo della lettura possiamo facilmente intuire come anche in questo caso sia possibile sfruttare la modalità asincrona, che può essere particolarmente utile nel caso in cui ci trovassimo a scrivere una grande mole di dati poiché ci consentirebbe di lasciare la scrittura del file in background e l'utente potrebbe eseguire altre operazioni nell'applicazione.

Ricordiamo che in caso di utilizzo di metodo asincrono è necessario usare gli eventi per sapere quando la scrittura del file è stata completata:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
  applicationComplete="inizia()">

  <mx:Script>
    <![CDATA[
      import flash.filesystem.*
      
      private function inizia():void{
        var cartella:File = File.documentsDirectory
        var file:File = cartella.resolve("ScrivoFile.txt")
        var scrivi:FileStream = new FileStream()
        scrivi.openAsync(file,FileMode.WRITE)
        scrivi.addEventListener(Event.COMPLETE,scritto)

        scrivi.writeUTFBytes("Prova di scrittura di un file")
        scrivi.close()
      }
      
      private function scritto(evt:Event):void{
        trace("Scrittura completata")
      }

    ]]>
  </mx:Script>
</mx:WindowedApplication>

Opzioni di scrittura

Se per leggere un file abbiamo i metodi READ ed UPDATE, per la scrittura abbiamo i metodi WRITE, APPEND e ancora una volta UPDATE che risulta valido per entrambe le operazioni.

  • WRITE apre il file in sola scrittura; se il file non esiste viene creato, se esiste già viene sovrascritto dai nuovi contenuti. Non è quindi possibile usare questo metodo per aggiungere dei dati ad un file, ma solo eventualmente per sostituirli.
  • APPEND apre il file in sola scrittura; se il file non esiste viene creato, se invece esiste già i dati verranno aggiunti alla fine del file, è quindi possibile usare questo metodo per aggiungere dati ad un file.
  • UPDATE come abbiamo già visto apre il file sia per la lettura che per la scrittura; se il file non esiste viene creato ed è possibile ricavare o scrivere informazioni in qualsiasi punto del file.

Ti consigliamo anche