Utilisation des objets File dans AIR

Adobe AIR 1.0 et les versions ultérieures

Un objet File est un pointeur vers un fichier ou un répertoire du système de fichiers.

La classe File étend la classe FileReference. La classe FileReference, qui est disponible dans Adobe® Flash® Player et AIR, représente un pointeur vers un fichier. La classe File ajoute des propriétés et des méthodes qui ne sont pas exposées dans Flash Player (dans un fichier SWF s’exécutant dans un navigateur), pour des raisons de sécurité.

Présentation de la classe File

La classe File permet d’effectuer les opérations suivantes :

  • Obtenir le chemin d’accès à des répertoires particuliers, notamment le répertoire de l’utilisateur, le répertoire de documents de l’utilisateur, le répertoire de lancement de l’application et le répertoire d’application

  • Copier des fichiers et des répertoires

  • Déplacer des fichiers et des répertoires

  • Supprimer des fichiers et des répertoires (ou les transférer dans la corbeille)

  • Afficher la liste des fichiers et répertoires que contient un répertoire

  • Créer des fichiers et des dossiers temporaires

Une fois qu’un objet File pointe vers un chemin de fichier, vous pouvez l’utiliser pour lire et écrire des données de fichier, à l’aide de la classe FileStream.

Un objet File peut pointer vers le chemin d’un fichier ou d’un répertoire qui n’existe pas encore. Vous pouvez utiliser un tel objet File pour créer un fichier ou un répertoire.

Chemin des objets File

Tout objet File possède deux propriétés qui définissent son chemin :

Propriété

Description

nativePath

Indique le chemin d’accès à un fichier en fonction de la plate-forme. Par exemple, sous Windows, un chemin se présente sous la forme « c:\Sample directory\test.txt » alors que sous Mac OS, il correspond à « /Sample directory/test.txt ». La propriété nativePath utilise la barre oblique inverse (\) comme séparateur de répertoires sous Windows et la barre oblique normale (/) sous Mac OS et Linux.

url

Cette propriété peut utiliser le modèle d’URL file pour pointer vers un fichier. Par exemple, sous Windows, un chemin se présente sous la forme « file:///c:/Sample%20directory/test.txt » alors que sous Mac OS, il correspond à « file:///Sample%20directory/test.txt ». Outre file, le moteur d’exécution propose d’autres modèles d’URL particuliers, qui sont décrits à la section Modèles d’URL AIR pris en charge.

La classe File comprend des propriétés statiques de pointage vers les répertoires standard sous Mac, Windows et Linux. Parmi ces propriétés figurent :

  • File.applicationStorageDirectory : répertoire de stockage spécifique à chaque application AIR installée. Ce répertoire est adapté au stockage des actifs d’applications dynamiques et des préférences utilisateur. Il est recommandé de stocker les volumes élevés de données dans un autre répertoire.

    Sous Android et iOS, le répertoire de stockage de l’application est supprimé lorsque l’utilisateur désinstalle l’application ou lorsqu’il décide d’effacer les données de l’application. Ce n’est toutefois pas le cas sur d’autres plates-formes.

  • File.applicationDirectory : répertoire dans lequel est installée l’application (et qui contient tout actif installé). Sur certains systèmes d’exploitation, l’application est stockée dans un fichier de package unique, plutôt que dans un répertoire physique. Dans ce cas de figure, il est parfois impossible d’accéder au contenu via le chemin natif. Le répertoire d’application est disponible en lecture seule.

  • File.desktopDirectory : répertoire du poste de travail de l’utilisateur. Si une plate-forme ne définit pas de répertoire de poste de travail, un autre emplacement du système de fichiers est alors utilisé.

  • File.documentsDirectory : répertoire de documents de l’utilisateur. Si une plate-forme ne définit pas de répertoire de documents, un autre emplacement du système de fichiers est alors utilisé.

  • File.userDirectory : répertoire de l’utilisateur. Si une plate-forme ne définit pas de répertoire utilisateur, un autre emplacement du système de fichiers est alors utilisé.

Remarque : si une plate-forme ne définit pas d’emplacement standard pour les répertoires de poste de travail, de documents ou d’utilisateur, File.documentsDirectory, File.desktopDirectory et File.userDirectory peuvent pointer vers le même répertoire.

La valeur de ces propriétés varie selon le système d’exploitation. Par exemple, le chemin natif vers le répertoire du poste de travail de l’utilisateur est différent sur Mac et Windows. La propriété File.desktopDirectory pointe néanmoins vers un chemin de répertoire approprié sur chaque plate-forme. Pour développer des applications qui fonctionnent correctement sur toutes les plateformes, utilisez ces propriétés comme base pour référencer d’autres fichiers et répertoires dont se sert l’application. Utilisez ensuite la méthode resolvePath() pour affiner le chemin. Par exemple, le code suivant pointe vers le fichier preferences.xml dans le répertoire de stockage de l’application :

var prefsFile:File = File.applicationStorageDirectory; 
prefsFile = prefsFile.resolvePath("preferences.xml");

Bien que la classe File vous permette de pointer vers un chemin de fichier déterminé, les applications risquent alors de ne pas fonctionner sur toutes les plates-formes. Par exemple, le chemin C:\Documents and Settings\joe\ ne fonctionne que sous Windows. C’est pourquoi il est préférable d’utiliser les propriétés statiques de la classe File, telles que File.documentsDirectory.

Emplacements de répertoire standard

Plate-forme

Type de répertoire

Emplacement de système de fichiers typique

Android

Application

/data/data/

Stockage d’application

/data/data/air.IDApplication/NomFichier/Local Store

Cache

/data/data/applicationID/cache

Bureau

/mnt/sdcard

Documents

/mnt/sdcard

Temporaire

/data/data/IDApplication/cache/FlashTmp.randomString

Utilisateur

/mnt/sdcard

iOS

Application

/var/mobile/Applications/uid/filename.app

Stockage d’application

/var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store

Cache

/var/mobile/Applications/uid/Library/Caches

Bureau

non accessible

Documents

/var/mobile/Applications/uid/Documents

Temporaire

/private/var/mobile/Applications/uid/tmp/FlashTmpNNN

Utilisateur

non accessible

Linux

Application

/opt/NomFichier/share

Stockage d’application

/home/NomUtilisateur/.appdata/IDApplicationID/Local Store

Bureau

/home/NomUtilisateur/Desktop

Documents

/home/NomUtilisateur/Documents

Temporaire

/tmp/FlashTmp.randomString

Utilisateur

/home/NomUtilisateur

Mac

Application

/Applications/NomFichier.app/Contents/Resources

Stockage d’application

/Utilisateurs/nomUtilisateur/Bibliothèque/Préférences/applicationid/Local Store (AIR 3.2 et versions ultérieures)

chemin/Bibliothèque/Application Support/applicationid/Local Store (AIR 3.3 et versions ultérieures), où le chemin est soit /Utilisateurs/nomUtilisateur/Bibliothèque/Containers/bundle-id/Data (environnement de sandbox), soit /Utilisateurs/nomUtilisateur (exécution en dehors d’un environnement de sandbox)

Cache

/Users/NomUtilisateur/Library/Caches

Bureau

/Utilisateurs/nomUtilisateur/Desktop

Documents

/Utilisateurs/nomUtilisateur/Documents

Temporaire

/private/var/folders/JY/randomString/TemporaryItems/FlashTmp

Utilisateur

/Utilisateurs/nomUtilisateur

Windows

Application

C:\Program Files\NomFichier

Stockage d’application

C:\Documents and settings\NomUtilisateur\ApplicationData\IDApplication\Local Store

Cache

C:\Documents and settings\NomUtilisateur\Local Settings\Temp

Bureau

C:\Documents and settings\NomUtilisateur\Desktop

Documents

C:\Documents and settings\NomUtilisateur\Mes documents

Temporaire

C:\Documents and settings\NomUtilisateur\Local Settings\Temp\randomString.tmp

Utilisateur

C:\Documents and settings\NomUtilisateur

Les chemins natifs de ces répertoires varient en fonction du système d’exploitation et de la configuration de l’ordinateur. Les chemins indiqués dans ce tableau représentent des exemples typiques. Pointez toujours vers ces répertoires par le biais des propriétés statiques appropriées de la classe File, afin que l’application fonctionne correctement quelle que soit la plate-forme. Dans une application AIR réelle, les valeurs des variables IDApplication et NomFichier indiquées dans le tableau sont extraites du descripteur d’application. Si vous stipulez un ID d’éditeur dans le descripteur d’application, il est ajouté à la fin de l’ID d’application dans ces chemins. La valeur de NomUtilisateur correspond au nom du compte de l’utilisateur qui installe l’application.

Pointage d’un objet File vers un répertoire

Vous disposez de plusieurs méthodes pour configurer un objet File afin qu’il pointe vers un répertoire.

Pointage vers le répertoire d’accueil de l’utilisateur

Vous pouvez pointer un objet File vers le répertoire d’accueil de l’utilisateur. Le code suivant configure l’objet File afin qu’il pointe vers le sous-répertoire AIR Test du répertoire d’accueil :

var file:File = File.userDirectory.resolvePath("AIR Test"); 

Pointage vers le répertoire de documents de l’utilisateur

Vous pouvez pointer un objet File vers le répertoire de documents de l’utilisateur. Le code suivant configure un objet File afin qu’il pointe vers le sous-répertoire AIR Test du répertoire de documents :

var file:File = File.documentsDirectory.resolvePath("AIR Test");

Pointage vers le répertoire du poste de travail

Vous pouvez pointer un objet File vers le poste de travail. Le code suivant configure un objet File afin qu’il pointe vers le sous-répertoire AIR Test du poste de travail :

var file:File = File.desktopDirectory.resolvePath("AIR Test");

Pointage vers le répertoire de stockage d’une application

Vous pouvez pointer un objet File vers le répertoire de stockage d’une application. A toute application AIR est associé un chemin unique qui définit son répertoire de stockage. Ce répertoire est spécifique à chaque application et utilisateur. Vous pouvez y stocker des données spécifiques à l’application et à l’utilisateur, notamment des données utilisateur ou des fichiers de préférences. Par exemple, le code suivant pointe un objet File vers un fichier de préférences, prefs.xml, qui réside dans le répertoire de stockage de l’application :

var file:File = File.applicationStorageDirectory; 
file = file.resolvePath("prefs.xml");

L’emplacement du répertoire de stockage de l’application est généralement déterminé par le nom d’utilisateur et l’ID d’application. Les emplacements suivants au sein du système de fichiers sont indiqués ci-après à des fins de débogage d’application. Utilisez toujours la propriété File.applicationStorage ou le modèle d’URI app-storage: pour résoudre les fichiers dans ce répertoire :

  • Sous Mac OS : dépend de la version AIR :

    AIR 3.2 et versions antérieures : /Utilisateurs/nom utilisateur/Bibliothèque/Préférences/applicationID/Local Store/

    AIR 3.3 et versions ultérieures : chemin/Bibliothèque/Application Support/applicationID/Local Store, où chemin est soit /Utilisateurs/nomUtilisateur/Bibliothèque/Containers/bundle-id/Data (environnement de sandbox), soit /Utilisateurs/nomUtilisateur (exécution en dehors d’un environnement de sandbox)

    Par exemple (AIR 3.2) :

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • Sous Windows, dans le répertoire Documents and Settings, dans :

    C:\Documents and Settings\nom d’utilisateur\Application Data\IDapplication\Local Store\

    Exemple :

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • Sous Linux, dans :

    /home/nom d’utilisateur/.appdata/IDapplication/Local Store/

    Exemple :

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • Sur Android, dans :

    /data/data/IDPackageAndroid/IDapplication/Local Store

    Exemple :

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Remarque : si une application possède un identifiant d’éditeur, ce dernier figure également dans le chemin du répertoire de stockage de l’application.

L’URL (et la propriété url) d’un objet File créé à l’aide de File.applicationStorageDirectory utilise le modèle d’URL app-storage (voir Modèles d’URL AIR pris en charge), comme l’illustre l’exemple suivant :

var dir:File = File.applicationStorageDirectory; 
dir = dir.resolvePath("preferences"); 
trace(dir.url); // app-storage:/preferences

Pointage vers le répertoire de l’application

Vous pouvez pointer un objet File vers le répertoire dans lequel une application est installée, ou répertoire d’application. Vous pouvez référencer ce répertoire à l’aide de la propriété File.applicationDirectory. Il permet d’examiner le fichier descripteur d’application ou d’autres ressources installées avec l’application. Par exemple, le code suivant pointe un objet File vers le répertoire images du répertoire d’application :

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 

L’URL (et la propriété url) d’un objet File créé à l’aide de File.applicationDirectory utilise le modèle d’URL app (voir Modèles d’URL AIR pris en charge), comme l’illustre l’exemple suivant :

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Remarque : sur Android, il est impossible d’accéder aux fichiers du package d’application par le biais de nativePath. La propriété nativePath est une chaîne vide. Accédez toujours aux fichiers que contient le répertoire de l’application par le biais de l’URL, plutôt que d’un chemin natif.

Pointage vers le répertoire du cache

Vous pouvez pointer un objet File vers le répertoire temporaire ou de cache du système d’exploitation en utilisant la propriété File.cacheDirectory. Ce répertoire contient des fichiers temporaires qui ne sont pas nécessaires à l’exécution de l’application et dont la suppression ne cause pas de problèmes ni de pertes de données pour l’utilisateur.

Dans la plupart des systèmes d’exploitation, le répertoire de cache est un répertoire temporaire. Sous iOS, le répertoire de cache correspond au répertoire Caches de la bibliothèque d’applications. Les fichiers de ce répertoire ne sont pas sauvegardés sur le stockage en ligne et peuvent être supprimés par le système d’exploitation si l’espace de stockage disponible sur le périphérique est insuffisant. Pour plus d’informations, voir Contrôle de la sauvegarde et de la mise en cache des fichiers.

Pointage vers la racine du système de fichiers

La méthode File.getRootDirectories() répertorie tous les volumes racine, tels que C: et les volumes montés, sur un ordinateur Windows. Sous Mac et Linux, cette méthode renvoie le répertoire racine unique de l’ordinateur (le répertoire « / »). La méthode StorageVolumeInfo.getStorageVolumes() propose des informations plus détaillées sur les volumes de stockage montés (voir Utilisation des volumes de stockage).

Remarque : il est impossible d’accéder en lecture à la racine du système de fichiers sur Android. La méthode renvoie un objet File qui pointe vers le répertoire par le biais du chemin natif « / », mais les propriétés de cet objet n’ont pas de valeur précise. Par exemple, spaceAvailable correspond toujours à 0.

Pointage vers un répertoire explicite

Vous pouvez pointer l’objet File vers un répertoire explicite en définissant sa propriété nativePath, comme l’illustre l’exemple ci-dessous (sous Windows) :

var file:File = new File(); 
file.nativePath = "C:\\AIR Test";

Important : utiliser cette technique pour pointer vers un chemin explicite risque de générer un code qui ne fonctionne pas sur toutes les plates-formes. Ainsi, l’exemple précédent ne fonctionne que sous Windows. Les propriétés statiques de l’objet File, telles que File.applicationStorageDirectory, permettent de localiser un répertoire qui fonctionne sur toutes les plates-formes. Utilisez ensuite la méthode resolvePath() (voir la section suivante) pour accéder à un chemin relatif.

Navigation vers des chemins relatifs

La méthode resolvePath() permet d’obtenir un chemin relatif à un autre chemin donné. Par exemple, le code suivant configure un objet File afin qu’il pointe vers le sous-répertoire « AIR Test » du répertoire d’accueil de l’utilisateur :

var file:File = File.userDirectory; 
file = file.resolvePath("AIR Test");

En outre, la propriété url d’un objet File permet de pointer celui-ci vers un répertoire basé sur une chaîne d’URL, comme illustré ci-dessous :

var urlStr:String = "file:///C:/AIR Test/"; 
var file:File = new File() 
file.url = urlStr; 

Pour plus d’informations, voir la section Modification de chemins de fichier.

Sélection d’un répertoire par l’utilisateur

La classe File comprend la méthode browseForDirectory(), qui présente une boîte de dialogue système dans laquelle l’utilisateur peut sélectionner un répertoire à affecter à l’objet. La méthode browseForDirectory() est asynchrone. L’objet File distribue un événement select si l’utilisateur sélectionne un répertoire et clique sur le bouton Ouvrir, ou un événement cancel si l’utilisateur clique sur le bouton Annuler.

Par exemple, le code suivant permet à l’utilisateur de sélectionner un répertoire et renvoie le chemin de celui-ci une fois la sélection effectuée :

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Remarque : sur Android, la méthode browseForDirectory() n’est pas prise en charge. Appeler cette méthode n’a pas d’effet et un événement d’annulation est immédiatement distribué. Pour que les utilisateurs puissent sélectionner un répertoire, utilisez plutôt une boîte de dialogue personnalisée définie par l’application.

Pointage vers le répertoire d’appel de l’application

Vous pouvez déterminer l’emplacement du répertoire à partir duquel une application est appelée en consultant la propriété currentDirectory de l’objet InvokeEvent distribué lors de l’appel de l’application. Pour plus d’informations, voir la section Capture des arguments de ligne de commande.

Pointage d’un objet File vers un fichier

Il existe plusieurs manières de définir le fichier vers lequel pointe un objet File.

Pointage vers un chemin de fichier explicite

Important : pointer vers un chemin explicite risque de générer un code qui ne fonctionne pas sur toutes les plates-formes. Ainsi, le chemin C:/foo.txt ne fonctionne que sous Windows. Les propriétés statiques de l’objet File, telles que File.applicationStorageDirectory, permettent de localiser un répertoire qui fonctionne sur toutes les plates-formes. Utilisez ensuite la méthode resolvePath() (voir Modification de chemins de fichier) pour accéder à un chemin relatif.

La propriété url d’un objet File permet de pointer celui-ci vers un fichier ou un répertoire basé sur une chaîne d’URL, comme illustré ci-dessous :

var urlStr:String = "file:///C:/AIR Test/test.txt"; 
var file:File = new File() 
file.url = urlStr; 

Vous pouvez aussi transmettre l’URL à la fonction constructeur File(), comme illustré ci-dessous :

var urlStr:String = "file:///C:/AIR Test/test.txt"; 
var file:File = new File(urlStr); 

La propriété url renvoie systématiquement la version URI de l’URL (les espaces sont remplacés par "%20, par exemple) :

file.url = "file:///c:/AIR Test"; 
trace(file.url); // file:///c:/AIR%20Test 

Vous pouvez aussi utiliser la propriété nativePath d’un objet File pour définir un chemin explicite. Par exemple, le code suivant, exécuté sur un ordinateur Windows, définit un objet File sur le fichier test.txt du sous-répertoire AIR Test du lecteur C: :

var file:File = new File(); 
file.nativePath = "C:/AIR Test/test.txt"; 

Vous pouvez aussi transmettre ce chemin à la fonction constructeur File(), comme illustré ci-dessous :

var file:File = new File("C:/AIR Test/test.txt"); 

Utilisez la barre oblique (/) comme délimiteur de chemin avec la propriété nativePath. Sous Windows, vous pouvez également utiliser la barre oblique inverse ( \ ), mais l’application ne fonctionnera pas sur d’autres plateformes.

Pour plus d’informations, voir la section Modification de chemins de fichier.

Enumération des fichiers d’un répertoire

La méthode getDirectoryListing() d’un objet File permet d’obtenir un tableau d’objets File pointant vers les fichiers et sous-répertoires situés au niveau racine d’un répertoire. Pour plus d’informations, voir la section Enumération de répertoires.

Sélection d’un fichier par l’utilisateur

La classe File comprend les méthodes suivantes, qui présentent une boîte de dialogue système dans laquelle l’utilisateur peut sélectionner un fichier à affecter à l’objet :

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Toutes ces méthodes sont asynchrones. Les méthodes browseForOpen() et browseForSave() distribuent l’événement select lorsque l’utilisateur sélectionne un fichier (ou, dans le cas de browseForSave(), un chemin cible). Avec les méthodes browseForOpen() et browseForSave(), lors de la sélection, l’objet File pointe vers les fichiers sélectionnés. La méthode browseForOpenMultiple() distribue un événement selectMultiple lorsque l’utilisateur sélectionne des fichiers. L’événement selectMultiple est de type FileListEvent et possède une propriété files, c’est-à-dire un tableau d’objets File (pointant vers les fichiers sélectionnés).

Par exemple, le code suivant présente une boîte de dialogue d’ouverture de fichier à l’utilisateur, lui permettant ainsi de sélectionner un fichier :

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); 
} 

Si une autre boîte de dialogue de navigation est ouverte dans l’application lors de l’appel d’une méthode browse, le moteur d’exécution renvoie une exception Error.

Remarque : sur Android, les méthodes browseForOpen() et browseForOpenMultiple() permettent de sélectionner des fichiers d’image, vidéo et audio uniquement. La boîte de dialogue browseForSave() affiche elle aussi les fichiers multimédias uniquement, même si l’utilisateur peut saisir un nom de fichier arbitraire. Pour ouvrir et enregistrer des fichiers d’un autre type, envisagez l’utilisation de boîtes de dialogue personnalisées au lieu de ces méthodes.

Modification de chemins de fichier

Vous pouvez également modifier le chemin d’un objet File existant en appelant la méthode resolvePath() ou en intervenant sur la propriété nativePath ou url de l’objet, comme l’illustrent les exemples suivants (sous 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 

Si vous faites appel à la propriété nativePath, utilisez la barre oblique (/) comme caractère de séparation des répertoires. Sous Windows, vous pouvez également utiliser la barre oblique (\), mais évitez de le faire, sous peine de générer un code qui ne fonctionne pas sur toutes les plates-formes.

Modèles d’URL AIR pris en charge

Lorsque vous définissez la propriété url d’un objet File dans AIR, vous pouvez utiliser les modèles d’URL suivants :

Modèle d’URL

Description

file

Permet de spécifier un chemin relatif à la racine du système de fichiers. Exemple :

file:///c:/AIR Test/test.txt

La norme URL spécifie qu’un modèle d’URL file se présente comme suit : file://<hôte>/<chemin>. <hôte> peut correspondre à la chaîne vide, ce qui signifie « la machine à partir de laquelle l’URL est interprétée ». C’est pourquoi les modèles d’URL file comportent souvent trois barres obliques (///).

app

Permet de spécifier un chemin relatif au répertoire racine de l’application installée (le répertoire contenant le fichier application.xml de l’application installée). Par exemple, le chemin suivant pointe vers le sous-répertoire images du répertoire de l’application installée :

app:/images

app-storage

Permet de spécifier un chemin relatif au répertoire de stockage de l’application. Pour chaque application installée, AIR définit un répertoire de stockage d’application unique. C’est un emplacement pratique auquel stocker des données spécifiques à l’application concernée. Par exemple, le chemin suivant pointe vers le fichier prefs.xml, qui réside dans le sous-répertoire settings du répertoire de stockage de l’application :

app-storage:/settings/prefs.xml

Contrôle de la sauvegarde et de la mise en cache des fichiers

Certains systèmes d’exploitation, notamment iOS et Mac OS X, offrent aux utilisateurs la possibilité de sauvegarder automatiquement les fichiers d’application sur un serveur de stockage distant. En outre, iOS présente des restrictions concernant la sauvegarde des fichiers et l’emplacement de stockage des différents types de fichier.

Les points suivants présentent de façon succincte comment rester en conformité avec les directives d’Apple concernant la sauvegarde et le stockage des fichiers. Pour plus d’informations, voir les sections suivantes.

  • Pour spécifier qu’un fichier n’a pas besoin d’être sauvegardé et (iOS uniquement) peut être supprimé par le système d’exploitation si le périphérique manque d’espace de stockage, enregistrez le ficher dans le répertoire de cache (File.cacheDirectory). Il s’agit de l’emplacement de stockage par défaut sous iOS, et il doit être utilisé pour la plupart des fichiers qui peuvent être régénérés ou retéléchargés.

  • Pour spécifier qu’un fichier n’a pas besoin d’être sauvegardé, mais qu’il ne doit pas être supprimé par le système d’exploitation, enregistrez-le dans l’un des répertoires de la bibliothèque d’applications, comme le répertoire de stockage des applications (File.applicationStorageDirectory) ou le répertoire de documents (File.documentsDirectory). Définissez la propriété preventBackup de l’objet File sur true. Apple demande de procéder de cette manière pour tout contenu qu’il est possible de générer ou télécharger à nouveau, mais qui est nécessaire au bon fonctionnement de votre application lors d’une utilisation hors ligne.

Spécification des fichiers à sauvegarder

Afin d’économiser l’espace de sauvegarde et de réduire le trafic réseau, les directives d’Apple pour les applications iOS et Mac spécifient que seuls les fichiers contenant des données saisies par l’utilisateur ou des données qu’il n’est pas possible de générer ou de télécharger à nouveau doivent être marqués comme « à sauvegarder ».

Par défaut, tous les fichiers des dossiers de la bibliothèque d’applications sont sauvegardés. Sous Mac OS X, il s’agit du répertoire de stockage des applications. Sous iOS, cela inclut le répertoire de stockage de l’application, le répertoire d’application, le répertoire Bureau, le répertoire de documents et le répertoire de l’utilisateur (car ces répertoires sont mappés sur les dossiers de la bibliothèque d’applications sur iOS). Par conséquent, tous les fichiers de ces répertoires sont sauvegardés par défaut sur serveur de stockage.

Si vous enregistrez dans l’un de ces emplacements un fichier que votre application peut recréer, il est recommandé de lui appliquer un marqueur de sorte que le système d’exploitation ne le sauvegarde pas. Pour indiquer qu’un fichier ne doit pas être sauvegardé, définissez la propriété preventBackup de l’objet File sur true.

Remarque : sous iOS, tout fichier se trouvant dans l’un des dossiers de la bibliothèque d’applications (même si sa propriété preventBackup a la valeur true) est marqué comme un fichier persistant que le système d’exploitation ne doit pas supprimer.

Contrôle de la mise en cache et de la suppression des fichiers

Les directives d’Apple concernant les applications iOS spécifient que, dans la mesure du possible, tout contenu qu’il est possible de régénérer doit pouvoir être supprimé par le système d’exploitation si l’espace de stockage est insuffisant sur le périphérique.

Sous iOS, les fichiers des dossiers de la bibliothèque d’applications (comme le répertoire de stockage de l’application ou le répertoire de documents) sont marqués comme permanents et ne sont pas supprimés par le système d’exploitation.

Enregistrez les fichiers que l’application peut régénérer et qui peuvent être supprimés sans risque si l’espace de stockage est insuffisant dans le répertoire de cache de l’application. Pour accéder au répertoire de cache, utilisez la propriété statique File.cacheDirectory.

Sous iOS, le répertoire de cache correspond au répertoire de cache de l’application (<Racine de l’application>/Library/Caches). Sous d’autres systèmes d’exploitation, ce répertoire est mappé sur un répertoire comparable. Par exemple, sous Mac OS X, il est également mappé sur le répertoire Caches de la bibliothèque d’applications. Sous Android, le répertoire de cache est mappé sur le répertoire de cache de l’application. Sous Windows, le répertoire de cache est mappé sur le répertoire temp du système d’exploitation. Sous Android et sous Windows, il s’agit du même répertoire que celui auquel accède un appel aux méthodes createTempDirectory() et createTempFile() de la classe File.

Détermination du chemin relatif entre deux fichiers

La méthode getRelativePath() vous permet de déterminer le chemin relatif entre deux fichiers :

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 

Le deuxième paramètre de la méthode getRelativePath(), useDotDot, permet le renvoi de la syntaxe .. dans les résultats, pour représenter les répertoires parent :

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 

Obtention des versions canoniques des noms de fichier

Les noms de fichier et de chemin ne respectent pas la casse sous Windows et Mac OS. Dans l’exemple suivant, deux objets File pointent vers un même fichier :

File.documentsDirectory.resolvePath("test.txt"); 
File.documentsDirectory.resolvePath("TeSt.TxT");

Les noms de document et de répertoire, en revanche, respectent la casse. Ainsi, l’exemple suivant considère comme acquis qu’il existe un dossier appelé AIR Test dans le répertoire documents :

var file:File = File.documentsDirectory.resolvePath("AIR test"); 
trace(file.nativePath); // ... AIR test 
file.canonicalize(); 
trace(file.nativePath); // ... AIR Test 

La méthode canonicalize() convertit l’objet nativePath afin qu’il utilise la combinaison correcte de majuscules et de minuscules dans le nom de fichier ou de répertoire. Sur les systèmes de fichiers sensibles à la casse (tels que Linux), lorsque plusieurs noms de fichier ne diffèrent que par la casse, la méthode canonicalize() ajuste le chemin de sorte qu’il corresponde au premier fichier détecté (dans l’ordre déterminé par le système de fichiers).

Vous pouvez aussi utiliser la méthode canonicalize() pour convertir les noms de fichier courts (« 8.3 ») en noms longs sous Windows, comme illustré ci-dessous :

var path:File = new File(); 
path.nativePath = "C:\\AIR~1"; 
path.canonicalize(); 
trace(path.nativePath); // C:\AIR Test

Utilisation de packages et de liens symboliques

Divers systèmes d’exploitation prennent en charge les fichiers de package et les fichiers de lien symbolique :

Packages—Sous Mac OS, les répertoires peuvent être désignés comme packages et apparaissent dans le Finder sous la forme d’un fichier unique plutôt que d’un répertoire.

Liens symboliques—Mac OS, Linux, et Windows Vista prennent en charge les liens symboliques. Les liens symboliques permettent à un fichier de pointer vers un autre fichier ou répertoire du disque. Bien que similaires aux alias, les liens symboliques diffèrent toutefois de ceux-ci. Un alias est systématiquement identifié en tant que fichier (plutôt que répertoire). La lecture d’un alias (ou raccourci) ou l’écriture dans celui-ci n’a aucune incidence sur le fichier ou le répertoire d’origine vers lequel il pointe. En revanche, un lien symbolique se comporte exactement comme le fichier ou le répertoire vers lequel il pointe. Il peut être identifié en tant que fichier ou répertoire. La lecture d’un lien symbolique ou l’écriture dans celui-ci affecte le fichier ou le répertoire vers lequel il pointe, pas le lien symbolique lui-même. De plus, sous Windows, la propriété isSymbolicLink d’un objet File référençant un point de jonction (utilisé dans le système de fichiers NTFS) est définie sur true.

La classe File comprend les propriétés isPackage et isSymbolicLink qui permettent de vérifier si un objet File référence un package ou un lien symbolique.

Le code suivant effectue une itération sur le répertoire du poste de travail de l’utilisateur, répertoriant les sous-répertoires qui ne sont pas des packages :

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); 
    } 
} 

Le code suivant effectue une itération sur le répertoire du poste de travail de l’utilisateur, répertoriant les fichiers et répertoires qui ne sont pas des liens symboliques :

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (!desktopNodes[i].isSymbolicLink) 
    { 
        trace(desktopNodes[i].name); 
    } 
} 

La méthode canonicalize() modifie le chemin d’un lien symbolique de sorte qu’il pointe vers le fichier ou le répertoire auquel le fichier ou le répertoire fait référence. Le code suivant effectue une itération sur le répertoire du poste de travail de l’utilisateur et identifie les chemins référencés par des fichiers qui sont des liens symboliques :

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); 
    } 
} 

Détermination de l’espace disponible sur un volume

La propriété spaceAvailable d’un objet File représente l’espace disponible utilisable, en octets, à l’emplacement de l’objet. Par exemple, le code suivant vérifie l’espace disponible dans le répertoire de stockage d’application :

trace(File.applicationStorageDirectory.spaceAvailable); 

Si l’objet File référence un répertoire, la propriété spaceAvailable indique l’espace que peuvent utiliser les fichiers dans le répertoire. Si l’objet File référence un fichier, la propriété spaceAvailable indique l’espace maximal que peut occuper le fichier. Si l’emplacement de fichier n’existe pas, la propriété spaceAvailable est définie sur 0. Si l’objet File référence un lien symbolique, la propriété spaceAvailable est définie sur l’espace disponible à l’emplacement vers lequel pointe le lien symbolique.

En règle générale, l’espace disponible pour un répertoire ou un fichier correspond à l’espace disponible sur le volume contenant ce répertoire ou fichier. Cependant, l’espace disponible peut tenir compte de quotas et de limites par répertoire.

Lors de l’ajout d’un fichier ou d’un répertoire à un volume, l’espace nécessaire est généralement supérieur à la taille réelle du fichier ou à la taille du contenu du répertoire. Il se peut, par exemple, que le système d’exploitation requiert de l’espace supplémentaire pour stocker des informations d’index. Les secteurs de disque requis utilisent peut-être de l’espace en plus. En outre, l’espace disponible change dynamiquement. Il est donc impossible d’allouer tout l’espace indiqué au stockage des fichiers. Pour plus d’informations sur l’écriture dans le système de fichiers, voir la section Lecture et écriture de fichiers.

La méthode StorageVolumeInfo.getStorageVolumes() propose des informations plus détaillées sur les volumes de stockage montés (voir Utilisation des volumes de stockage).

Ouverture de fichiers dans l’application système définie par défaut

AIR 2 permet d’ouvrir un fichier dans l’application enregistrée à cet effet par le système d’exploitation. Une application AIR peut ainsi ouvrir un fichier DOC dans l’application enregistrée à cet effet. Faites appel à la méthode openWithDefaultApplication() d’un objet File pour ouvrir le fichier. Le code suivant ouvre par exemple le fichier test.doc sur le bureau de l’utilisateur dans l’application associée par défaut aux fichiers DOC :

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Remarque : sous Linux, le type MIME du fichier, plutôt que son extension, détermine l’application associée par défaut à un fichier.

Le code suivant permet à l’utilisateur d’accéder à un fichier MP3 et de l’ouvrir dans l’application associée par défaut à la lecture des fichiers 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(); 
}

Il est impossible d’utiliser la méthode openWithDefaultApplication() pour les fichiers qui résident dans le répertoire de l’application.

AIR vous interdit d’utiliser la méthode openWithDefaultApplication() pour ouvrir certains fichiers. Sous Windows, AIR vous interdit d’ouvrir les fichiers de type EXE ou BAT, par exemple. Sous Mac OS et Linux, AIR vous empêche d’ouvrir les fichiers qui s’exécutent dans une application spécifique (y compris Terminal et AppletLauncher sous Mac OS, ainsi que csh, bash ou ruby sous Linux). Tenter d’ouvrir l’un de ces fichiers par le biais de la méthode openWithDefaultApplication() renvoie une exception. Pour obtenir la liste complète des types de fichiers concernés, voir la rubrique du guide de référence du langage consacrée à la méthode File.openWithDefaultApplication().

Remarque : cette limitation n’existe pas pour une application AIR installée à l’aide d’un programme d’installation natif (application de bureau étendue).