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-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).
|
|
|