L'oggetto File è un puntatore a un file o una directory del file system.
La classe File estende la classe FileReference. La classe FileReference, disponibile in Adobe® Flash® Player e AIR, rappresenta un puntatore a un file. La classe File aggiunge proprietà e metodi che non sono esposti in Flash Player (in un file SWF eseguito in un browser), per motivi di sicurezza.
Informazioni sulla classe File
Potete utilizzare la classe File per le seguenti operazioni:
-
Recupero del percorso di directory speciali, comprese la directory dell'utente, la directory dei documenti dell'utente, quella da cui è stata avviata l'applicazione e la directory dell'applicazione
-
Copiatura di file e directory
-
Spostamento di file e directory
-
Eliminazione di file e directory (o spostamento nel cestino)
-
Elencazione di file e directory contenuti in una directory
-
Creazione di file e cartelle temporanei
Una volta che l'oggetto File punta a un percorso file, potete utilizzarlo per leggere e scrivere dati di file, utilizzando la classe FileStream.
Un oggetto File può puntare al percorso di un file o di una directory che non esiste ancora. Potete utilizzare un oggetto File di questo tipo per creare un file o una directory.
Percorsi degli oggetti File
Ogni oggetto File ha due proprietà che ne definiscono il percorso:
Proprietà
|
Descrizione
|
nativePath
|
Definisce il percorso di un file a una piattaforma specifica. Ad esempio, in Windows un percorso potrebbe essere "c:\Directory esempio\test.txt", mentre in Mac OS potrebbe essere "/Directory esempio/test.txt". Una proprietà
nativePath
utilizza, come carattere separatore di directory, il carattere barra rovesciata (\) in Windows e il carattere barra (/) in Mac OS e Linux.
|
url
|
È possibile utilizzare lo schema URL del file per puntare a un file. Ad esempio, in Windows un percorso potrebbe essere "file:///c:/Sample%20directory/test.txt", mentre in Mac OS potrebbe essere "file:///Sample%20directory/test.txt". Il runtime comprende altri schemi URL speciali oltre a
file
, descritti in
Schemi URL AIR supportati
|
La classe File comprende proprietà statiche che consentono di puntare a directory standard in Mac OS, Windows e Linux. Tali proprietà includono:
-
File.applicationStorageDirectory
- Una directory di archiviazione specifica per ciascuna applicazione AIR installata. Questa directory è appropriata per memorizzare le risorse applicazione dinamiche e le preferenze utente. Valutate l'opportunità di memorizzare grandi quantità di dati altrove.
Su Android e iOS, la directory di memorizzazione dell'applicazione viene rimossa durante la disinstallazione dell'applicazione o quando l'utente sceglie di cancellare i dati applicazione, ma questo non accade su altre piattaforme.
-
File.applicationDirectory
- La directory in cui è installata l'applicazione (con le eventuali risorse installate). In alcuni sistemi operativi, l'applicazione viene memorizzata in un file di pacchetto singolo anziché in una directory fisica. In questo caso, il contenuto potrebbe non essere accessibile utilizzando il percorso nativo. La directory dell'applicazione è di sola lettura.
-
File.desktopDirectory
- La directory del desktop dell'utente. Se una piattaforma non definisce una directory desktop, viene utilizzata un'altra posizione del file system.
-
File.documentsDirectory
- La directory dei documenti dell'utente. Se una piattaforma non definisce una directory documenti, viene utilizzata un'altra posizione del file system.
-
File.userDirectory
- La directory dell'utente. Se una piattaforma non definisce una directory dell'utente, viene utilizzata un'altra posizione del file system.
Nota:
quando una piattaforma non definisce posizioni standard per desktop, documenti o directory utente,
File.documentsDirectory
,
File.desktopDirectory
e
File.userDirectory
possono fare riferimento alla stessa directory.
Queste proprietà hanno valori diversi su sistemi operativi differenti. Ad esempio, Mac e Windows prevedono percorsi nativi differenti per la directory del desktop dell'utente. Tuttavia, la proprietà
File.desktopDirectory
fa riferimento a un percorso di directory appropriato su ogni piattaforma. Per scrivere applicazioni in grado di funzionare senza problemi in più piattaforme, utilizzate queste proprietà come base per fare riferimento ad altri file e directory utilizzati dall'applicazione. Quindi, utilizzate il metodo
resolvePath()
per definire con precisione il percorso. Ad esempio, questo codice punta al file preferences.xml nella directory di archiviazione dell'applicazione:
var prefsFile:File = File.applicationStorageDirectory;
prefsFile = prefsFile.resolvePath("preferences.xml");
Sebbene la classe File consenta di fare riferimento a un percorso file specifico, l'applicazione potrebbe non funzionare tra diverse piattaforme. Ad esempio, il percorso C:\Documents and Settings\joe\ funziona solo in Windows. Per tali motivi, è meglio utilizzare le proprietà statiche della classe File, ad esempio
File.documentsDirectory
.
Percorsi directory comuni
Piattaforma
|
Tipo di directory
|
Percorso file system tipico
|
Android
|
Applicazione
|
/data/data/
|
Application-storage
|
/data/data/air.applicationID/filename/Local Store
|
Cache
|
/data/data/applicationID/cache
|
Desktop
|
/mnt/sdcard
|
Documenti
|
/mnt/sdcard
|
Temporanea
|
/data/data/applicationID/cache/FlashTmp.randomString
|
Utente
|
/mnt/sdcard
|
iOS
|
Applicazione
|
/var/mobile/Applications/uid/filename.app
|
Application-storage
|
/var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store
|
Cache
|
/var/mobile/Applications/uid/Library/Caches
|
Desktop
|
non accessibile
|
Documenti
|
/var/mobile/Applications/uid/Documents
|
Temporanea
|
/private/var/mobile/Applications/uid/tmp/FlashTmpNNN
|
Utente
|
non accessibile
|
Linux
|
Applicazione
|
/opt/filename/share
|
Application-storage
|
/home/userName/.appdata/applicationID/Local Store
|
Desktop
|
/home/userName/Desktop
|
Documenti
|
/home/userName/Documents
|
Temporanea
|
/tmp/FlashTmp.randomString
|
Utente
|
/home/userName
|
Mac
|
Applicazione
|
/Applications/filename.app/Contents/Resources
|
Application-storage
|
/Users/
nomeUtente
/Library/Preferences/
applicationid
/Local Store
(AIR 3.2 e versioni precedenti)
path
/Library/Application Support/
applicationid
/Local Store
(AIR 3.3 e versioni successive), dove path è
/Users/
userName
/Library/Containers/
bundle-id
/Data
(ambiente con sandbox) o
/Users/userName
(al di fuori di un ambiente con sandbox)
|
Cache
|
/Users/userName/Library/Caches
|
Desktop
|
/Users/
userName
/Desktop
|
Documenti
|
/Users/
userName
/Documents
|
Temporanea
|
/private/var/folders/JY/randomString/TemporaryItems/FlashTmp
|
Utente
|
/Users/
userName
|
Windows
|
Applicazione
|
C:\Programmi\filename
|
Application-storage
|
C:\Documents and settings\userName\ApplicationData\applicationID\Local Store
|
Cache
|
C:\Documents and settings\userName\Local Settings\Temp
|
Desktop
|
C:\Documents and settings\userName\Desktop
|
Documenti
|
C:\Documents and settings\userName\My Documents
|
Temporanea
|
C:\Documents and settings\userName\Local Settings\Temp\randomString.tmp
|
Utente
|
C:\Documents and settings\userName
|
I percorsi nativi effettivi per queste directory variano in base al sistema operativo e alla configurazione del computer. I percorsi mostrati in questa tabella sono esempi tipici. Utilizzate sempre le proprietà della classe File statica appropriate per fare riferimento a queste directory in modo che l'applicazione funzioni correttamente su qualsiasi piattaforma. In un'applicazione AIR effettiva, i valori per
applicationID
e
filename
mostrati nella tabella sono presi dal descrittore dell'applicazione. Se nel descrittore dell'applicazione specificate un ID editore, questo viene aggiunto all'ID applicazione in questi percorsi. Il valore per
userName
è il nome account dell'utente che esegue l'installazione.
Puntamento di un oggetto File a una directory
Sono disponibili diversi modi per impostare un oggetto File in modo che punti a una directory.
Puntamento alla directory home dell'utente
È possibile puntare un oggetto File alla directory home dell'utente. Il codice seguente imposta un oggetto File che punta alla sottodirectory AIR Test della directory home:
var file:File = File.userDirectory.resolvePath("AIR Test");
Puntamento alla directory Documenti dell'utente
È possibile puntare un oggetto File alla directory Documenti dell'utente. Il codice seguente imposta un oggetto File che punta alla sottodirectory AIR Test della directory Documenti:
var file:File = File.documentsDirectory.resolvePath("AIR Test");
Puntamento alla directory del desktop
È possibile puntare un oggetto File al desktop. Il codice seguente imposta un oggetto File che punta a una sottodirectory AIR Test del desktop:
var file:File = File.desktopDirectory.resolvePath("AIR Test");
Puntamento alla directory di memorizzazione dell'applicazione
È possibile puntare un oggetto File alla directory di memorizzazione dell'applicazione. Per ogni applicazione AIR, vi è un unico percorso associato univoco che definisce la directory di memorizzazione dell'applicazione. Tale directory è unica per ogni applicazione e per ogni utente. Potete utilizzare questa directory per memorizzare dati specifici dell'utente o dell'applicazione (ad esempio i dati dell'utente o i file delle preferenze). Ad esempio, il codice seguente punta un oggetto File a un file di preferenze, prefs.xml, contenuto nella directory di memorizzazione dell'applicazione:
var file:File = File.applicationStorageDirectory;
file = file.resolvePath("prefs.xml");
Il percorso della directory di archiviazione dell'applicazione è in genere basato sul nome utente e sull'ID applicazione. I percorsi file system seguenti sono forniti qui per semplificare il debug dell'applicazione. Utilizzate sempre la proprietà
File.applicationStorage
o lo schema URI
app-storage:
per risolvere file in questa directory:
-
Su Mac OS - in base alla versione AIR:
AIR 3.2 e versioni precedenti
:
/Users/nome utente/Library/Preferences/
applicationID
/Local Store/
AIR 3.3 e versioni successive
:
path
/Library/Application Support/
applicationID
/Local Store
, dove
path
è
/Users/
username
/Library/Containers/
bundle-id
/Data
(ambiente con sandbox) oppure
/Users/
username
(al di fuori di un ambiente con sandbox)
Ad esempio (AIR 3.2):
/Users/babbage/Library/Preferences/com.example.TestApp/Local Store
-
In Windows, nella directory Documents and Settings, in:
C:\Documents and Settings\nome utente
\Dati applicazioni\
applicationID
\Local Store\
Ad esempio:
C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
-
In Linux - In:
/home/
nome utente
/.appdata/
applicationID
/Local Store/
Ad esempio:
/home/babbage/.appdata/com.example.TestApp/Local Store
-
Su Android, in:
/data/data/
androidPackageID
/
applicationID/Local Store
Ad esempio:
/data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Nota:
se un'applicazione dispone di un ID editore, questo viene anche utilizzato come parte del percorso alla directory di archiviazione dell'applicazione.
L'URL (e la proprietà
url
) di un oggetto File creato tramite
File.applicationStorageDirectory
utilizza lo schema URL
app-storage
(consultate
Schemi URL AIR supportati
), come nel caso seguente:
var dir:File = File.applicationStorageDirectory;
dir = dir.resolvePath("preferences");
trace(dir.url); // app-storage:/preferences
Puntamento alla directory dell'applicazione
È possibile puntare un oggetto File alla directory in cui è stata installata l'applicazione, nota anche come directory dell'applicazione. Potete fare riferimento a questa directory mediante la proprietà
File.applicationDirectory
. Potete utilizzare questa directory per esaminare il file descrittore dell'applicazione o altre risorse installate con l'applicazione. Ad esempio, il codice seguente punta un oggetto File a una directory denominata
images
nella directory dell'applicazione:
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("images");
L'URL (e la proprietà
url
) di un oggetto File creato tramite
File.applicationDirectory
utilizza lo schema URL
app
(consultate
Schemi URL AIR supportati
), come nel caso seguente:
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("images");
trace(dir.url); // app:/images
Nota:
su Android, i file nel pacchetto dell'applicazione non sono accessibili tramite la proprietà
nativePath
. La proprietà
nativePath
è una stringa vuota. Utilizzate sempre l'URL per accedere ai file nella directory dell'applicazione anziché un percorso nativo.
Puntamento alla directory cache
Potete puntare un oggetto File alla directory temporanea o cache del sistema operativo mediante la proprietà
File.cacheDirectory
. Questa directory contiene file temporanei non richiesti per l'esecuzione dell'applicazione e l'eliminazione di tali file non provocherà problemi o perdite di dati per l'utente.
Nella maggior parte dei sistemi operativi la directory cache è una directory temporanea. In iOS, la directory cache corrisponde alla directory delle cache della libreria dell'applicazione. I file in questa directory non vengono sottoposti a backup per l'archiviazione in linea e possono essere potenzialmente eliminati dal sistema operativo se lo spazio di archiviazione disponibile nel dispositivo è troppo ridotto. Per maggiori informazioni, vedere
Controllo del backup dei file e memorizzazione nella cache
.
Puntamento alla directory principale di sistema
Il metodo
File.getRootDirectories()
elenca tutti i volumi principali, come C: e i volumi montati, di un computer Windows. In Mac OS e Linux, questo metodo restituisce sempre l'unica directory principale della macchina (la directory "/"). Il metodo
StorageVolumeInfo.getStorageVolumes()
fornisce informazioni più dettagliate sui volumi di memorizzazione montati (vedete
Operazioni con volumi di memorizzazione
).
Nota:
la directory principale del file system non è leggibile su Android. Viene restituito un oggetto File che fa riferimento alla directory con il percorso nativo, “/”, ma le proprietà dell'oggetto non dispongono di valori accurati. Ad esempio,
spaceAvailable
è sempre 0.
Puntamento a una directory esplicita
È possibile puntare l'oggetto File a una directory esplicita impostandone la proprietà
nativePath
, come nell'esempio seguente (in Windows):
var file:File = new File();
file.nativePath = "C:\\AIR Test";
Importante:
puntare a un percorso esplicito in questo modo può portare a codice che non funziona tra piattaforme diverse. Ad esempio, il codice precedente funziona solo in Windows. Potete utilizzare le proprietà statiche dell'oggetto File, ad esempio
File.applicationStorageDirectory
, per individuare una directory che funziona tra piattaforme diverse. Utilizzate quindi il metodo
resolvePath()
(vedete la sezione successiva) per passare a un percorso relativo.
Accesso a percorsi relativi
È possibile utilizzare il metodo
resolvePath()
per ottenere un percorso relativo a un altro percorso specifico. Ad esempio, il codice seguente imposta un oggetto File che punta alla sottodirectory "AIR Test" della directory home dell'utente:
var file:File = File.userDirectory;
file = file.resolvePath("AIR Test");
Potete anche utilizzare la proprietà
url
di un oggetto File per puntarlo a una directory in base a una stringa URL, come nel caso seguente:
var urlStr:String = "file:///C:/AIR Test/";
var file:File = new File()
file.url = urlStr;
Per ulteriori informazioni, consultate
Modifica dei percorsi File
.
Selezione di una directory da parte dell'utente
La classe File comprende il metodo
browseForDirectory()
, che presenta una finestra di dialogo di sistema in cui l'utente può selezionare una directory da assegnare all'oggetto. Il metodo
browseForDirectory()
è asincrono. L'oggetto File invia un evento
select
se l'utente seleziona una directory e fa clic sul pulsante Apri, oppure un evento
cancel
se l'utente fa clic sul pulsante Annulla.
Ad esempio, il codice seguente consente all'utente di selezionare una directory e visualizza il percorso della directory una volta eseguita la selezione:
var file:File = new File();
file.addEventListener(Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(e:Event):void {
trace(file.nativePath);
}
Nota:
su Android, il metodo
browseForDirectory()
non è supportato. La chiamata di questo metodo non ha effetto; viene inviato immediatamente un evento cancel. Per consentire agli utenti di selezionare una directory, utilizzate una finestra di dialogo personalizzata definita dall'applicazione.
Puntamento alla directory da cui viene chiamata l'applicazione
Potete ottenere la posizione della directory da cui viene chiamata un'applicazione selezionando la proprietà
currentDirectory
dell'evento InvokeEvent inviato quando l'applicazione viene chiamata. Per informazioni dettagliate, consultate
Acquisizione degli argomenti della riga di comando
.
Puntamento di un oggetto File a un file
Sono disponibili diversi modi per impostare il file a cui punta un oggetto File.
Puntamento a un percorso file esplicito
Importante:
puntare a un percorso esplicito può portare a codice che non funziona tra piattaforme diverse. Ad esempio, il percorso C:/foo.txt funziona solo in Windows. Potete utilizzare le proprietà statiche dell'oggetto File, ad esempio
File.applicationStorageDirectory
, per individuare una directory che funziona tra piattaforme diverse. Utilizzate quindi il metodo
resolvePath()
(vedete
Modifica dei percorsi File
) per passare a un percorso relativo.
Potete utilizzare la proprietà
url
di un oggetto File per puntarlo a un file o a una directory in base a una stringa URL, come nel caso seguente:
var urlStr:String = "file:///C:/AIR Test/test.txt";
var file:File = new File()
file.url = urlStr;
Potete anche passare l'URL alla funzione di costruzione
File()
, come nel caso seguente:
var urlStr:String = "file:///C:/AIR Test/test.txt";
var file:File = new File(urlStr);
La proprietà
url
restituisce sempre la versione codificata URI dell'URL (ad esempio, gli spazi vuoti vengono sostituiti da
"%20
):
file.url = "file:///c:/AIR Test";
trace(file.url); // file:///c:/AIR%20Test
Potete anche utilizzare la proprietà
nativePath
di un oggetto File per impostare un percorso esplicito. Ad esempio, il codice seguente, se eseguito su un computer Windows, imposta un oggetto File sul file test.txt nella sottodirectory AIR Test dell'unità C:
var file:File = new File();
file.nativePath = "C:/AIR Test/test.txt";
Potete anche passare questo percorso alla funzione di costruzione
File()
, come nel caso seguente:
var file:File = new File("C:/AIR Test/test.txt");
Utilizzate solo il carattere barra (/) come delimitatore percorso per la proprietà
nativePath
. In Windows, potete anche utilizzare la barra rovesciata (\), ma in questo caso l'applicazione potrebbe non funzionare tra piattaforme diverse.
Per ulteriori informazioni, consultate
Modifica dei percorsi File
.
Enumerazione dei file di una directory
Potete utilizzare il metodo
getDirectoryListing()
di un oggetto File per recuperare un array di oggetti File che puntano ai file e alle sottodirectory al livello principale di una directory. Per ulteriori informazioni, consultate
Enumerazione delle directory
.
Selezione di un file da parte dell'utente
La classe File comprende i metodi che presentano una finestra di dialogo di sistema in cui l'utente può selezionare un file da assegnare all'oggetto.
-
browseForOpen()
-
browseForSave()
-
browseForOpenMultiple()
Questi metodi sono tutti asincroni. I metodi
browseForOpen()
e
browseForSave()
inviano l'evento di selezione quando l'utente seleziona un file (o un percorso target, nel caso di browseForSave()). Con i metodi
browseForOpen()
e
browseForSave()
, a seguito della selezione l'oggetto File di destinazione punta ai file selezionati. Il metodo
browseForOpenMultiple
() invia un evento
selectMultiple
quando l'utente seleziona i file. L'evento
selectMultiple
è del tipo FileListEvent, che ha una proprietà
files
che corrisponde a un array di oggetti File (che puntano ai file selezionati).
Ad esempio, il codice seguente mostra all'utente una finestra di dialogo “Apri” in cui l'utente può selezionare un file:
var fileToOpen:File = File.documentsDirectory;
selectTextFile(fileToOpen);
function selectTextFile(root:File):void
{
var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");
root.browseForOpen("Open", [txtFilter]);
root.addEventListener(Event.SELECT, fileSelected);
}
function fileSelected(event:Event):void
{
trace(fileToOpen.nativePath);
}
Se nell'applicazione è aperta un'altra finestra di dialogo di consultazione file quando chiamate un metodo browse, il runtime genera un'eccezione Error.
Nota:
su Android, solo file immagine, video e audio possono essere selezionati con i metodi
browseForOpen()
e
browseForOpenMultiple()
. La finestra di dialogo browseForSave() contiene solo file multimediali anche se l'utente può immettere un nome file arbitrario. Per l'apertura e il salvataggio di file non multimediali, considerate la possibilità di utilizzare finestre di dialogo personalizzate anziché questi metodi.
Modifica dei percorsi File
Potete inoltre modificare il percorso di un oggetto File esistente chiamando il metodo
resolvePath()
o modificando la proprietà
nativePath
o
url
dell'oggetto, come negli esempi seguenti (in Windows):
var file1:File = File.documentsDirectory;
file1 = file1.resolvePath("AIR Test");
trace(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test
var file2:File = File.documentsDirectory;
file2 = file2.resolvePath("..");
trace(file2.nativePath); // C:\Documents and Settings\userName
var file3:File = File.documentsDirectory;
file3.nativePath += "/subdirectory";
trace(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory
var file4:File = new File();
file4.url = "file:///c:/AIR Test/test.txt";
trace(file4.nativePath); // C:\AIR Test\test.txt
Con la proprietà
nativePath
utilizzate il carattere barra (/) come carattere separatore di directory. In Windows, potete utilizzare anche il carattere barra rovesciata (\), ma il suo impiego non è consigliato perché può portare a codice che non funziona tra piattaforme diverse.
Schemi URL AIR supportati
In AIR, potete utilizzare uno qualsiasi dei seguenti schemi URL per definire la proprietà
url
di un oggetto File:
Schema URL
|
Descrizione
|
file
|
Specifica un percorso relativo alla directory principale del file system. Ad esempio:
file:///c:/AIR Test/test.txt
Lo standard URL specifica che un URL di file assume la forma
file://<host>/<path>
. Come caso speciale,
<host>
può essere una stringa vuota, che viene interpretata come "il sistema da cui l'URL viene interpretato". Per questo motivo, gli URL file spesso presentano tre barre (///).
|
app
|
Specifica un percorso relativo alla directory principale dell'applicazione installata (la directory contenente il file application.xml dell'applicazione installata). Ad esempio, il percorso seguente punta alla sottodirectory images della directory dell'applicazione installata:
|
app-storage
|
Specifica un percorso relativo alla directory di memorizzazione dell'applicazione. Per ogni applicazione installata, AIR definisce una directory univoca di memorizzazione dell'applicazione, che costituisce una comoda ubicazione in cui memorizzare i dati specifici di un'applicazione. Ad esempio, il percorso seguente punta a un file prefs.xml in una sottodirectory delle impostazioni della directory di memorizzazione dell'applicazione:
app-storage:/settings/prefs.xml
|
Controllo del backup dei file e memorizzazione nella cache
Alcuni sistemi operativi, in particolare iOS e Mac OS X, forniscono agli utenti la possibilità di eseguire automaticamente il backup di file applicazione in una posizione di archiviazione remota. Inoltre, i dispositivi iOS presentano restrizioni relative ai file da sottoporre a backup e alle posizioni di archiviazione di file con scopi diversi.
Di seguito vengono riepilogate le modalità per garantire la conformità alle linee guida Apple per l'archiviazione e la memorizzazione di file. Per ulteriori informazioni, consultate le sezioni successive.
-
Per specificare che un file non necessita di backup e che può essere eliminato dal sistema operativo (solo per iOS) se lo spazio di archiviazione del dispositivo non è sufficiente, salvate il file nella directory cache (
File.cacheDirectory
). Si tratta della posizione di archiviazione preferita nei dispositivi iOS e dovrebbe essere utilizzata per la maggior parte dei file che è possibile rigenerare o scaricare di nuovo.
-
Per specificare che un file non necessita di backup, ma non deve essere eliminato dal sistema operativo, salvate il file in una delle directory delle librerie dell'applicazione, come la directory di archiviazione dell'applicazione (
File.applicationStorageDirectory
) o la directory dei documenti
File.documentsDirectory
). Impostate la proprietà
preventBackup
dell'oggetto File su
true
. Questa procedura è richiesta da Apple per i contenuti che possono essere rigenerati o scaricati nuovamente ed è necessaria per il corretto funzionamento dell'applicazione durante l'utilizzo non in linea.
Indicazione dei file per il backup
Per risparmiare spazio di backup e ridurre l'utilizzo dell'ampiezza di banda della rete, nelle linee guida di Apple per le applicazioni iOS e Mac è specificato che solo i file che contengono dati immessi dall'utente o che non possono essere rigenerati o scaricati nuovamente dovrebbero essere sottoposti a backup.
Per impostazione predefinita, tutti i file nelle cartelle delle librerie dell'applicazione sono sottoposti a backup. In Mac OS X si tratta della directory di archiviazione dell'applicazione. In iOS, include la directory di archiviazione dell'applicazione, la directory dell'applicazione, la directory del desktop, la directory dei documenti e la directory utente (in quanto tali directory sono mappate per le cartelle delle librerie dell'applicazione in iOS). Di conseguenza, qualsiasi file contenuto in tali directory viene sottoposto a backup nello spazio di archiviazione del server per impostazione predefinita.
Se in una di queste posizioni state salvando un file che può essere ricreato dall'applicazione, si consiglia di contrassegnare il file in modo che il sistema operativo non lo sottoponga a backup. Per indicare che un file non deve essere sottoposto a backup, impostate la proprietà
preventBackup
dell'oggetto del File su
true
.
Considerate che nei dispositivi iOS, per un file in una qualsiasi cartella delle librerie dell'applicazione, anche se la proprietà
preventBackup
del file è impostata su
true
, il file è contrassegnato come persistente e pertanto non può essere eliminato dal sistema operativo.
Controllo dell'eliminazione e della memorizzazione del file
Nelle linee guida Apple per le applicazioni iOS è specificato che, per quanto possibile, il sistema operativo dovrebbe essere in grado di eliminare i contenuti che è possibile rigenerare, nel caso in cui lo spazio di archiviazione del dispositivo sia ridotto.
Nei dispositivi iOS, i file nelle cartelle delle librerie dell'applicazione (come la directory di archiviazione dell'applicazione o la directory dei documenti) sono contrassegnati come permanenti e non possono essere eliminati dal sistema operativo.
Salvate i file che possono essere rigenerati dall'applicazione ed è possibile eliminare se lo spazio di archiviazione della directory della cache dell'applicazione è ridotto. Potete accedere alla directory della cache mediante la proprietà statica
File.cacheDirectory
.
Nei dispositivi iOS, la directory della cache corrisponde alla directory della cache dell'applicazione (<Home applicazione>/Library/Caches). In altri sistemi operativi, la directory è mappata in una directory simile. Ad esempio, in Mac OS X viene inoltre mappata nella directory Cache nelle librerie dell'applicazione. In Android, la directory della cache viene mappata nella directory della cache dell'applicazione. In Windows, la directory della cache viene mappata nella directory temporanea del sistema operativo. In Android e Windows, si tratta della stessa directory a cui si accede mediante una chiamata ai metodi
createTempDirectory()
e
createTempFile()
della classe File.
Individuazione del percorso relativo tra due file
Potete utilizzare il metodo
getRelativePath()
per individuare il percorso relativo tra due file:
var file1:File = File.documentsDirectory.resolvePath("AIR Test");
var file2:File = File.documentsDirectory
file2 = file2.resolvePath("AIR Test/bob/test.txt");
trace(file1.getRelativePath(file2)); // bob/test.txt
Il secondo parametro del metodo
getRelativePath()
, il parametro
useDotDot
, consente di restituire la sintassi
..
nei risultati, per indicare le directory principali:
var file1:File = File.documentsDirectory;
file1 = file1.resolvePath("AIR Test");
var file2:File = File.documentsDirectory;
file2 = file2.resolvePath("AIR Test/bob/test.txt");
var file3:File = File.documentsDirectory;
file3 = file3.resolvePath("AIR Test/susan/test.txt");
trace(file2.getRelativePath(file1, true)); // ../..
trace(file3.getRelativePath(file2, true)); // ../../bob/test.txt
Recupero di versioni canoniche dei nomi di file
Per i nomi di file e percorsi non viene fata distinzione tra maiuscole e minuscole in Windows e Mac OS. Nel caso seguente, due oggetti File puntano allo stesso file:
File.documentsDirectory.resolvePath("test.txt");
File.documentsDirectory.resolvePath("TeSt.TxT");
Tuttavia, i nomi dei documenti e delle directory includono caratteri sia minuscoli che maiuscoli. Ad esempio, il caso seguente ipotizza che vi sia una cartella denominata AIR Test nella directory documents:
var file:File = File.documentsDirectory.resolvePath("AIR test");
trace(file.nativePath); // ... AIR test
file.canonicalize();
trace(file.nativePath); // ... AIR Test
Il metodo
canonicalize
converte l'oggetto
nativePath
in modo che utilizzi le maiuscole corrette per il nome del file o della directory. Nei file system che fanno distinzione tra maiuscole e minuscole (ad esempio Linux), quando sono presenti più file con nomi diversi solo per le maiuscole/minuscole, il metodo
canonicalize()
adatta il percorso in modo che corrisponda al primo file trovato (in un ordine determinato dal file system).
Potete utilizzare il metodo
canonicalize()
anche per convertire i nomi file brevi (in formato "8.3") in nomi lunghi in Windows, come negli esempi seguenti:
var path:File = new File();
path.nativePath = "C:\\AIR~1";
path.canonicalize();
trace(path.nativePath); // C:\AIR Test
Operazioni con pacchetti e collegamenti simbolici
Diversi sistemi operativi supportano file di pacchetto e file di collegamenti simbolici:
Pacchetti
- In Mac OS, le directory possono essere designate come pacchetti in modo da essere visualizzate nel Finder di Mac OS come file singolo anziché come directory.
Collegamenti simbolici
- Mac OS, Linux e Windows Vista supportano i collegamenti simbolici. I collegamenti simbolici consentono a un file di puntare a un altro file o un'altra directory presente nel disco. Sebbene simili, i collegamenti simbolici non sono identici agli alias. Un alias è sempre indicato come file (anziché come directory) e la lettura o la scrittura di un alias o un collegamento a un alias non ha mai alcun effetto sul file o sulla directory originale a cui punta. Al contrario, un collegamento simbolico si comporta esattamente come il file o la directory a cui punta. Può essere indicato come file o directory e la lettura o la scrittura di un collegamento simbolico ha effetto sul file o sulla directory a cui punta, non sul collegamento simbolico. Inoltre, in Windows la proprietà
isSymbolicLink
per un oggetto File che fa riferimento a un punto di congiunzione (utilizzato nel file system NTFS) è impostata su
true
.
La classe File comprende le proprietà
isPackage
e
isSymbolicLink
, che consentono di verificare se un oggetto File fa riferimento a un pacchetto o a un collegamento simbolico.
Il codice seguente esegue un'iterazione nella directory desktop dell'utente, elencando le sottodirectory che
non
sono pacchetti:
var desktopNodes:Array = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (desktopNodes[i].isDirectory && !desktopNodes[i].isPackage)
{
trace(desktopNodes[i].name);
}
}
Il codice seguente esegue un'iterazione nella directory desktop dell'utente, elencando i file e le directory che
non
sono collegamenti simbolici:
var desktopNodes:Array = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (!desktopNodes[i].isSymbolicLink)
{
trace(desktopNodes[i].name);
}
}
Il metodo
canonicalize()
cambia il percorso di un collegamento simbolico in modo che punti al file o alla directory a cui il collegamento fa riferimento. Il codice seguente esegue un'iterazione nella directory desktop dell'utente e restituisce i percorsi a cui fanno riferimento i file che sono collegamenti simbolici:
var desktopNodes:Array = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (desktopNodes[i].isSymbolicLink)
{
var linkNode:File = desktopNodes[i] as File;
linkNode.canonicalize();
trace(linkNode.nativePath);
}
}
Rilevamento dello spazio disponibile su un volume
La proprietà
spaceAvailable
di un oggetto File corrisponde allo spazio disponibile in byte per l'utilizzo nel percorso File. Ad esempio, il codice seguente controlla lo spazio disponibile nella directory di memorizzazione dell'applicazione:
trace(File.applicationStorageDirectory.spaceAvailable);
Se l'oggetto File fa riferimento a una directory, la proprietà
spaceAvailable
indica lo spazio nella directory che i file possono utilizzare. Se l'oggetto File fa riferimento a un file, la proprietà
spaceAvailable
indica lo spazio in cui il file potrebbe aumentare di dimensione. Se il percorso del file non esiste, la proprietà
spaceAvailable
è impostata su 0. Se l'oggetto File fa riferimento a un collegamento simbolico, la proprietà
spaceAvailable
è impostata sullo spazio disponibile nel percorso a cui punta il collegamento simbolico.
Di solito lo spazio disponibile per una directory o un file è uguale allo spazio disponibile nel volume contenente la directory o il file. Tuttavia, tale spazio può includere quote e limiti per singola directory.
L'aggiunta di un file o di una directory a un volume di solito richiede più spazio delle dimensioni effettive del file o del contenuto della directory. Ad esempio, il sistema operativo può richiedere più spazio per memorizzare le informazioni di indice, oppure i settori del disco richiesti possono utilizzare altro spazio. Inoltre, lo spazio disponibile cambia in modo dinamico, quindi non è possibile prevedere di allocare tutto lo spazio indicato per la memorizzazione dei file. Per informazioni sulla scrittura nel file system, consultate
Lettura e scrittura di file
.
Il metodo
StorageVolumeInfo.getStorageVolumes()
fornisce informazioni più dettagliate sui volumi di memorizzazione montati (vedete
Operazioni con volumi di memorizzazione
).
Apertura di file con l'applicazione di sistema predefinita
In AIR 2, potete aprire un file utilizzando l'applicazione registrata dal sistema operativo per aprirla. Ad esempio, un'applicazione AIR può aprire un file DOC con l'applicazione registrata per aprirla. Utilizzate il metodo
openWithDefaultApplication()
di un oggetto File per aprire il file. Ad esempio, il codice seguente apre un file denominato test.doc sul desktop dell'utente utilizzando l'applicazione predefinita per i file DOC:
var file:File = File.deskopDirectory;
file = file.resolvePath("test.doc");
file.openWithDefaultApplication();
Nota:
in Linux, il tipo MIME del file, non l'estensione del nome file, determina l'applicazione predefinita per un file.
Il codice seguente consente all'utente di accedere a un file mp3 e di aprirlo nell'applicazione predefinita per la riproduzione di file mp3:
var file:File = File.documentsDirectory;
var mp3Filter:FileFilter = new FileFilter("MP3 Files", "*.mp3");
file.browseForOpen("Open", [mp3Filter]);
file.addEventListener(Event.SELECT, fileSelected);
function fileSelected(e:Event):void
{
file.openWithDefaultApplication();
}
Non potete utilizzare il metodo
openWithDefaultApplication()
con file che si trovano nella directory dell'applicazione.
AIR impedisce di usare il metodo
openWithDefaultApplication()
per aprire alcuni file. In Windows, AIR impedisce di aprire file di un determinato tipo, ad esempio EXE o BAT. In Mac OS e Linux, AIR impedisce l'apertura di file che vengono avviati in un'applicazione specifica. (Questo include Terminal e AppletLauncher in Mac OS e csh, bash o ruby in Linux.) Se tentate di aprire uno di questi file utilizzando il metodo
openWithDefaultApplication()
viene generata un'eccezione. Per un elenco completo dei tipi di file non consentiti, vedete la voce della Guida di riferimento per il metodo
File.openWithDefaultApplication()
.
Nota:
questa limitazione non esiste per un'applicazione AIR installata utilizzando un programma di installazione nativo (un'applicazione desktop estesa).
|
|
|