Arbeiten mit File-Objekten in AIR

Adobe AIR 1.0 und höher

Ein File-Objekt ist ein Zeiger auf eine Datei oder ein Verzeichnis im Dateisystem.

Die File-Klasse erweitert die FileReference-Klasse. Die FileReference-Klasse, die sowohl in Adobe® Flash® Player als auch in AIR verfügbar ist, repräsentiert einen Zeiger auf eine Datei. Die File-Klasse fügt Eigenschaften und Methoden hinzu, die aus Sicherheitsgründen in Flash Player (in einer SWF-Datei, die in einem Browser ausgeführt wird) nicht angezeigt werden.

File-Klasse

Mit der File-Klasse können Sie folgende Aktionen ausführen:

  • Abrufen des Pfads zu speziellen Verzeichnissen, einschließlich des Benutzerverzeichnisses, des Dokumentverzeichnisses des Benutzers, des Verzeichnisses, aus dem die Anwendung gestartet wurde, und des Anwendungsverzeichnisses.

  • Kopieren von Dateien und Verzeichnissen

  • Verschieben von Dateien und Verzeichnissen

  • Löschen von Dateien und Verzeichnissen (bzw. Verschieben in den Papierkorb)

  • Auflisten von Dateien und Verzeichnissen in einem bestimmten Verzeichnis

  • Erstellen temporärer Dateien und Ordner

Sobald ein File-Objekt auf einen Dateipfad zeigt, können Sie mithilfe der FileStream-Klasse Daten in der Datei lesen oder Daten in die Datei schreiben.

Ein File-Objekt kann auch auf den Pfad einer Datei oder eines Verzeichnisses zeigen, das noch gar nicht existiert. Sie können ein solches File-Objekt beim Erstellen einer Datei oder eines Verzeichnisses verwenden.

Pfade von File-Objekten

Jedes File-Objekt hat zwei Eigenschaften, die jeweils seinen Pfad definieren:

Eigenschaft

Beschreibung

nativePath

Gibt den plattformspezifischen Pfad zu einer Datei an. Unter Windows könnte ein Pfad beispielsweise „c:\Beispielverzeichnis\test.txt“ lauten und unter Mac OS „/Beispielverzeichnis/test.txt“. Eine nativePath -Eigenschaft verwendet den umgekehrten Schrägstrich (\) als Verzeichnistrenner unter Windows und den vorwärts gerichteten Schrägstrich (/) unter Mac OS und Linux.

url

Hier kann das file-URL-Schema verwendet werden, um auf eine Datei zu zeigen. Unter Windows könnte ein Pfad beispielsweise „file:///c:/Beispielverzeichnis/test.txt“ lauten und unter Mac OS „file:///Beispielverzeichnis/test.txt". Die Laufzeitumgebung umfasst neben dem file -Schema weitere spezielle URL-Schemas. Diese werden unter Unterstützte AIR-URL-Schemata erläutert.

Die File-Klasse enthält statische Eigenschaften, um auf Standardverzeichnisse von MAC OS, Windows und Linux zu zeigen. Zu diesen Eigenschaften gehören:

  • File.applicationStorageDirectory : ein für jede der installierten AIR-Anwendungen eindeutiger Speicherordner. Dieses Verzeichnis eignet sich zum Speichern von dynamischen Anwendungselementen und von Benutzervoreinstellungen. Große Datenmengen sollten in einem anderen Verzeichnis gespeichert werden.

    Auf Android-Geräten und unter iOS wird das Anwendungsspeicherverzeichnis entfernt, wenn der Benutzer die Anwendung deinstalliert oder Anwendungsdaten löscht; auf anderen Plattformen ist dies jedoch nicht der Fall.

  • File.applicationDirectory – das Verzeichnis, in dem die Anwendung installiert wird (zusammen mit ggf. installierten Beständen). Unter einigen Betriebssystemen wird die Anwendung in einer einzelnen Paketdatei gespeichert, nicht in einem physischen Verzeichnis. In diesem Fall ist der Zugriff auf den Inhalt über den nativen Pfad eventuell nicht möglich. Das Anwendungsverzeichnis ist schreibgeschützt.

  • File.desktopDirectory – das Desktopverzeichnis des Benutzers. Wenn auf der Plattform kein Desktopverzeichnis definiert ist, wird ein anderes Verzeichnis im Dateisystem verwendet.

  • File.documentsDirectory – das Dokumentverzeichnis des Benutzers. Wenn auf der Plattform kein Dokumentverzeichnis definiert ist, wird ein anderes Verzeichnis im Dateisystem verwendet.

  • File.userDirectory : das Benutzerverzeichnis. Wenn auf der Plattform kein Benutzerverzeichnis definiert ist, wird ein anderes Verzeichnis im Dateisystem verwendet.

Hinweis: Wenn auf der Plattform keine Standardorte für das Desktop-, Dokument- oder Benutzerverzeichnis definiert sind, können File.documentsDirectory , File.desktopDirectory und File.userDirectory auf dasselbe Verzeichnis verweisen.

Diese Eigenschaften verfügen auf verschiedenen Betriebssystemen über unterschiedliche Werte. Zum Beispiel verwenden Mac und Windows jeweils unterschiedliche native Pfade zum Desktopverzeichnis des Benutzers. Die File.desktopDirectory -Eigenschaft verweist jedoch auf jeder Plattform auf einen geeigneten Verzeichnispfad. Nutzen Sie diese Eigenschaften als Grundlage für Verweise auf andere Verzeichnisse und Dateien, die von der Anwendung verwendet werden, um Anwendungen zu schreiben, die auf allen Plattformen gleichermaßen gut funktionieren. Verwenden Sie anschließend die resolvePath() -Methode für die genauere Festlegung des Pfads. Der nachfolgende Code verweist z. B. auf die Datei „preferences.xml“ im Speicherordner der Anwendung.

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

Mit der File-Klasse können Sie zwar auf einen spezifischen Dateipfad zeigen, damit erhalten Sie möglicherweise jedoch Anwendungen, die nicht auf allen Plattformen funktionieren. Der Pfad C:\Dokumente und Einstellungen\joe\ funktioniert zum Beispiel nur unter Windows. Deshalb sind die statischen Eigenschaften der File-Klasse besser geeignet, zum Beispiel File.documentsDirectory .

Gemeinsame Verzeichnispfade

Plattform

Verzeichnistyp

Typischer Pfad im Dateisystem

Android

Anwendung

/data/data/

Anwendungsspeicher

/data/data/air.Anwendungs_ID/Dateiname/Local Store

Cache

/data/data/Anwendungs_ID/cache

Desktop

/mnt/sdcard

Dokumente

/mnt/sdcard

Temporär

/data/data/Anwendungs_ID/cache/FlashTmp.randomString

Benutzer

/mnt/sdcard

iOS

Anwendung

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

Anwendungsspeicher

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

Cache

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

Desktop

nicht zugriffsbereit

Dokumente

/var/mobile/Applications/uid/Documents

Temporär

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

Benutzer

nicht zugriffsbereit

Linux

Anwendung

/opt/Dateiname/share

Anwendungsspeicher

/home/Benutzername/.appdata/Anwendungs_ID/Local Store

Desktop

/home/Benutzername/Desktop

Dokumente

/home/Benutzername/Documents

Temporär

/tmp/FlashTmp.randomString

Benutzer

/home/Benutzername

Mac

Anwendung

/Applications/filename.app/Contents/Resources

Anwendungsspeicher

/Benutzer/ Benutzername /Library/Preferences/ applicationid /Local Store (AIR 3.2 und früher)

Pfad /Library/Application Support/ applicationid Local Store (AIR 3.3 und neuer), wobei „Pfad“ entweder /Benutzer/ Benutzername /Library/Containers/ bundle-id /Data (Sandbox-Umgebung) oder /Benutzer/Benutzername (bei Ausführung außerhalb einer Sandbox-Umgebung) ist

Cache

/Benutzer/Benutzername/Library/Caches

Desktop

/Benutzer/ Benutzername /Desktop

Dokumente

/Benutzer/ Benutzername /Dokumente

Temporär

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

Benutzer

/Benutzer/ Benutzername

Windows

Anwendung

C:\Programme\Dateiname

Anwendungsspeicher

C:\Dokumente und Einstellungen\Benutzername\Anwendungsdaten\Anwendungs_ID\Local Store

Cache

C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp

Desktop

C:\Dokumente und Einstellungen\Benutzername\Desktop

Dokumente

C:\Dokumente und Einstellungen\Benutzername\Eigene Dokumente

Temporär

C:\Dokumente und Einstellungen\Benutzername\Lokale Einstellungen\Temp\randomString.tmp

Benutzer

C:\Dokumente und Einstellungen\Benutzername

Die tatsächlichen nativen Pfade dieser Verzeichnisse variieren je nach Betriebssystem und Computerkonfiguration. Die in dieser Tabelle genannten Pfade sind typische Beispiele. Sie sollten stets mit den entsprechenden Eigenschaften der statischen File-Klasse auf diese Verzeichnisse verweisen, um sicherzustellen, dass Ihre Anwendung auf jeder Plattform korrekt funktioniert. In einer echten AIR-Anwendung stammen die in der Tabelle gezeigten Werte für Anwendungs_ID und Dateiname aus dem Anwendungsdeskriptor. Wenn Sie im Anwendungsdeskriptor eine Herausgeber-ID angeben, wird diese ID in diesen Pfaden an die Anwendungs-ID angehängt. Der Wert für Benutzername ist der Kontoname des Benutzers, der die Installation durchführt.

Verweisen vom File-Objekt auf ein Verzeichnis

Es gibt verschiedene Möglichkeiten, um ein File-Objekt so einzurichten, dass es auf ein Verzeichnis zeigt.

Verweisen auf das Stammverzeichnis eines Benutzers

Sie können einen Zeiger vom File-Objekt zum Stammverzeichnis definieren. Im folgenden Beispiel wird ein File-Objekt so eingerichtet, dass es auf das Unterverzeichnis „AIR Test“ des Stammverzeichnisses zeigt:

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

Verweisen auf das Dokumentenverzeichnis eines Benutzers

Sie können einen Verweis vom File-Objekt auf das Dokumentverzeichnis eines Benutzers definieren. Im folgenden Beispiel wird ein File-Objekt so eingerichtet, dass es auf das Unterverzeichnis „AIR Test“ des Dokumentverzeichnisses zeigt:

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

Verweisen auf das Desktopverzeichnis eines Benutzers

Sie können einen Zeiger vom File-Objekt zum Desktopverzeichnis eines Benutzers definieren. Im folgenden Beispiel wird ein File-Objekt so eingerichtet, dass es auf das Unterverzeichnis „AIR Test“ des Desktopverzeichnisses zeigt:

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

Verweisen auf das Anwendungsspeicherverzeichnis

Sie können einen Zeiger vom File-Objekt zum Anwendungsspeicherverzeichnis definieren. Für jede AIR-Anwendung gibt es einen eindeutigen verknüpften Pfad, der das Anwendungsspeicherverzeichnis definiert. Dieses Verzeichnis ist für jede Anwendung und jeden Benutzer eindeutig. Dieses Verzeichnis eignet sich zum Speichern benutzerspezifischer, anwendungsspezifischer Daten (z. B. Benutzerdaten oder eine Datei mit Einstellungen). Der folgende Code etwa verweist von einem File-Objekt auf die Einstellungsdatei „prefs.xml“, die sich im Anwendungsspeicherverzeichnis befindet.

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

Das Anwendungsspeicherverzeichnis basiert normalerweise auf dem Benutzernamen und der Anwendungs-ID. Die folgenden Dateisystemverzeichnisse sollen Ihnen beim Debuggen Ihrer Anwendung helfen. Verwenden Sie immer die File.applicationStorage -Eigenschaft oder das app-storage: -URI-Schema zum Auflösen der Dateien in diesem Verzeichnis:

  • Unter Mac OS – abhängig von der AIR-Version:

    AIR 3.2 und älter : /Benutzer/Benutzername/Library/Preferences/ applicationID /Local Store/

    AIR 3.3 und höher : Pfad /Library/Application Support/ applicationID /Local Store , wobei Pfad entweder /Benutzer/ Benutzername /Library/Containers/ bundle-id /Data (Sandbox-Umgebung) oder /Benutzer/ Benutzername ist (bei Ausführung außerhalb einer Sandbox-Umgebung)

    Beispiel (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • Unter Windows – im Verzeichnis „Dokumente und Einstellungen“:

    C:\Dokumente und Einstellungen\Benutzername \Anwendungsdaten\ Anwendungs_ID \Local Store\

    Zum Beispiel:

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • Unter Linux – in:

    /home/ Benutzername /.appdata/ Anwendungs_ID /Local Store/

    Zum Beispiel:

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • Unter Android – in:

    /data/data/ android_Paket_ID / Anwendungs-ID/Local Store

    Zum Beispiel:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Hinweis: Wenn eine Anwendung über eine Herausgeber-ID verfügt, gehört diese ebenfalls zum Pfad des Anwendungsspeicherverzeichnisses.

Die URL (und die url -Eigenschaft) eines File-Objekts, das mit File.applicationStorageDirectory erstellt wurde, verwendet das URL-Schema app-storage (siehe Unterstützte AIR-URL-Schemata ). Hier ein Codebeispiel:

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

Verweisen auf das Anwendungsverzeichnis

Sie können einen Zeiger vom File-Objekt zu dem Verzeichnis, in dem die Anwendung installiert worden ist, dem so genannten Anwendungsverzeichnis, definieren. Sie können mithilfe der Eigenschaft File.applicationDirectory auf dieses Verzeichnis verweisen. Sie können dieses Verzeichnis verwenden, um die Anwendungsdeskriptordatei oder andere mit der Anwendung installierten Ressourcen zu untersuchen. Der folgende Code etwa verweist von einem File-Objekt auf ein Verzeichnis im Anwendungsverzeichnis mit dem Namen images :

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

Die URL (und die url -Eigenschaft) eines File-Objekts, das mit File.applicationDirectory erstellt wurde, verwendet das URL-Schema app (siehe Unterstützte AIR-URL-Schemata ). Hier ein Codebeispiel:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Hinweis: Bei Android ist der Zugriff auf die Dateien im Anwendungspaket nicht über nativePath möglich. Die nativePath -Eigenschaft ist ein leerer String. Verwenden Sie für den Zugriff auf die Dateien im Anwendungsverzeichnis immer die URL anstelle des nativen Pfads.

Verweisen auf das Cacheverzeichnis

Sie können ein File-Objekt mithilfe der Eigenschaft File.cacheDirectory auf das temporäre Verzeichnis oder Cacheverzeichnis des Betriebssystems verweisen. Dieses Verzeichnis enthält temporäre Dateien, die nicht zum Ausführen der Anwendung erforderlich sind und nicht zu Problemen bzw. Datenverlust führen, falls sie gelöscht werden.

Unter den meisten Betriebssystemen ist das Cacheverzeichnis ein temporäres Verzeichnis. Unter iOS entspricht das Cacheverzeichnis dem Cacheverzeichnis der Anwendungsbibliothek. Dateien in diesem Verzeichnis werden nicht im Online-Speicher gesichert und möglicherweise vom Betriebssystem gelöscht, falls das Gerät nicht über ausreichend freien Speicherplatz verfügt. Weitere Informationen finden Sie unter Steuern der Dateisicherung und -zwischenspeicherung .

Verweisen auf das Stammverzeichnis des Dateisystems

Die File.getRootDirectories() -Methode gibt eine Liste aller Stammspeichermedien auf einem Windows-Computer aus, z. B. „C:“ oder auch gemountete Speichermedien. Unter Mac OS und Linux liefert diese Methode immer das eindeutige Stammverzeichnis des Rechners, nämlich "/". Die StorageVolumeInfo.getStorageVolumes() -Methode liefert ausführlichere Informationen über gemountete Speichermedien (siehe Arbeiten mit Speichermedien ).

Hinweis: Das Stammverzeichnis des Dateisystems kann unter Android nicht gelesen werden. Ein File-Objekt, das mit dem nativen Pfad „/“ auf das Verzeichnis verweist, wird zurückgegeben, aber die Werte der Eigenschaften dieses Objekts sind ungenau. Beispielsweise ist spaceAvailable immer 0.

Verweisen auf ein bestimmtes Verzeichnis

Sie können vom File-Objekt auf ein bestimmtes Verzeichnis verweisen, indem Sie die nativePath -Eigenschaft des File-Objekts setzen. Hier ein Beispiel unter Windows:

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

Wichtig: Wenn Sie auf diese Weise auf einen expliziten Pfad verweisen, funktioniert der Code möglicherweise nicht auf allen Plattformen. Das oben genannte Beispiel funktioniert beispielsweise nur unter Windows. Verwenden Sie die statischen Eigenschaften des File-Objekts, zum Beispiel File.applicationStorageDirectory , um so auf ein Verzeichnis zu zeigen, dass die Anwendung auf allen Plattformen funktioniert. Mit der resolvePath() -Methode (siehe nächster Abschnitt) können Sie dann zu einem relativen Pfad navigieren.

Navigieren zu relativen Verzeichnispfaden

Mit der Methode resolvePath() können Sie einen Pfad in Relation zu einem anderen, gegebenen Pfad abrufen. Im folgenden Code beispielsweise wird ein File-Objekt so eingerichtet, dass es auf das Unterverzeichnis „AIR Test“ des Stammverzeichnisses eines Benutzers zeigt:

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

Sie können auch die url -Eigenschaft eines File-Objekts verwenden, um anhand eines URL-Strings auf ein Verzeichnis zu zeigen:

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

Weitere Informationen hierzu finden Sie unter Ändern von Dateipfaden .

Verzeichnisauswahl über die Verzeichnisstruktur

Die File-Klasse beinhaltet die Methode browseForDirectory() , die ein Systemdialogfeld anzeigt, in dem der Benutzer die Verzeichnisstruktur durchsuchen kann, um ein Verzeichnis auszuwählen und es dem Objekt zuzuweisen. browseForDirectory() ist eine asynchrone Methode. Das File-Objekt löst ein select -Ereignis aus, wenn der Benutzer ein Verzeichnis auswählt und auf die Schaltfläche „Öffnen“ klickt. Oder sie löst ein cancel -Ereignis aus, wenn der Benutzer auf die Schaltfläche „Abbrechen“ klickt.

Der folgende Code etwa erlaubt dem Benutzer die Auswahl eines Verzeichnisses aus der Verzeichnisstruktur und gibt dann den Verzeichnispfad aus:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Hinweis: Unter Android wird die browseForDirectory() -Methode nicht unterstützt. Ein Aufruf dieser Methode hat keinerlei Auswirkung, da sofort ein cancel-Ereignis ausgelöst wird. Um Benutzern die Möglichkeit zu geben, ein Verzeichnis auszuwählen, stellen Sie stattdessen ein benutzerdefiniertes Dialogfeld für die Anwendung bereit.

Verweisen auf das Verzeichnis, von dem aus die Anwendung aufgerufen wurde

Sie können den Pfad eines Verzeichnisses abrufen, von dem aus die Anwendung aufgerufen wurde. Dazu prüfen Sie die currentDirectory -Eigenschaft des InvokeEvent-Objekts, das beim Aufrufen der Anwendung ausgelöst worden ist. Weitere Informationen finden Sie unter Erfassen von Befehlszeilenargumenten .

Verweisen vom File-Objekt zu einer Datei

Es gibt verschiedene Möglichkeiten, um die Datei festzulegen, auf die ein File-Objekt zeigt.

Verweisen auf einen bestimmten Verzeichnispfad

Wichtig: Wenn Sie auf einen expliziten Pfad verweisen, funktioniert der Code möglicherweise nicht auf allen Plattformen. Der Pfad „C:/foo.txt“ funktioniert zum Beispiel nur unter Windows. Verwenden Sie die statischen Eigenschaften des File-Objekts, zum Beispiel File.applicationStorageDirectory , um so auf ein Verzeichnis zu zeigen, dass die Anwendung auf allen Plattformen funktioniert. Mit der resolvePath() -Methode (siehe Ändern von Dateipfaden ) können Sie dann zu einem relativen Pfad navigieren.

Sie können die url -Eigenschaft eines File-Objekts verwenden, um anhand eines URL-Strings auf eine Datei oder ein Verzeichnis zu zeigen:

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

Sie können den URL auch wie folgt an die Konstruktorfunktion File() übergeben:

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

Die Eigenschaft url gibt immer die URI-kodierte Version des URLs zurück (wobei Leerzeichen beispielsweise durch "%20 ersetzt werden):

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

Sie können auch die nativePath -Eigenschaft eines File-Objekts verwenden, um einen bestimmten Pfad zu setzen. Wird der folgende Code beispielsweise auf einem Windows-Computer ausgeführt, wird ein File-Objekt auf die Datei „test.txt“ im Unterverzeichnis „AIR Test“ des Laufwerks „C:“ gesetzt:

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

Sie können diesen Pfad auch wie folgt an die Konstruktorfunktion File() übergeben:

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

Verwenden Sie den Schrägstrich (/) als Pfadtrenner für die nativePath -Eigenschaft. Unter Windows können Sie auch den umgekehrten Schrägstrich (\) verwenden, dies führt jedoch zu Anwendungen, die nicht auf allen Plattformen funktionieren.

Weitere Informationen hierzu finden Sie unter Ändern von Dateipfaden .

Aufzählen von Dateien in einem Verzeichnis

Mithilfe der getDirectoryListing() -Methode eines File-Objekts können Sie einen Array mit File-Objekten abrufen, die auf Dateien und Unterverzeichnisse auf der Stammebene eines Verzeichnisses zeigen. Weitere Informationen finden Sie unter Erstellen von Verzeichnislisten .

Dateiauswahl über die Verzeichnisstruktur

Die File-Klasse beinhaltet die folgenden Methoden, die ein Systemdialogfeld anzeigen, in dem der Benutzer die Verzeichnisstruktur durchsuchen kann, um eine Datei auszuwählen und sie dem Objekt zuzuweisen.

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Diese Methoden sind alle asynchron. Die Methoden browseForOpen() und browseForSave() lösen das Ereignis „select“ aus, wenn der Benutzer eine Datei auswählt (bzw. im Falle von „browseForSave()“ einen Zielpfad). Bei den Methoden browseForOpen() und browseForSave() zeigt das File-Objekt bei einer Auswahl auf die ausgewählten Dateien. Die Methode browseForOpenMultiple() löst ein selectMultiple -Ereignis aus, wenn der Benutzer mehrere Dateien auswählt. Das Ereignis selectMultiple hat den Typ „FileListEvent“, der eine files -Eigenschaft besitzt, die ein Array mit File-Objekten darstellt (die auf die ausgewählten Dateien zeigen).

Im folgenden Codebeispiel wird dem Benutzer ein Open-Dialogfeld anzeigt, in dem der Benutzer eine Datei auswählen kann:

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

Ist in der Anwendung ein anderes Durchsuchen-Dialogfeld geöffnet, wenn Sie eine browse-Methode aufrufen, wird von der Laufzeitumgebung eine Error-Ausnahme ausgelöst.

Hinweis: Unter Android können nur Bild-, Video- und Audiodateien mit den Methoden browseForOpen() und browseForOpenMultiple() ausgewählt werden. Das mit browseForSave() aufgerufene Dialogfeld zeigt ebenfalls nur Mediendateien an, obwohl der Benutzer einen beliebigen Dateinamen eingeben kann. Zum Öffnen und Speichern von Dateien, bei denen es sich nicht um Medien handelt, empfiehlt sich die Verwendung von benutzerdefinierten Dialogfeldern anstelle dieser Methoden.

Ändern von Dateipfaden

Sie können auch den Pfad eines vorhandenen File-Objekts ändern, indem Sie die Methode resolvePath() aufrufen oder die Eigenschaft nativePath oder url des Objekts ändern. Hier ein Beispiel unter 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 

Wenn Sie mit der nativePath -Eigenschaft arbeiten, verwenden Sie den Schrägstrich (/) Verzeichnistrennzeichen. Unter Windows können Sie auch den umgekehrten Schrägstrich (\) verwenden, dies sollte jedoch vermieden werden, da der entsprechende Code dann nicht auf allen Plattformen verwendet werden kann.

Unterstützte AIR-URL-Schemata

In AIR können Sie beim Definieren der url -Eigenschaft eines File-Objekts eines der folgenden URL-Schemata verwenden:

URL-Schema

Beschreibung

file

Verwenden Sie dieses Schema, um einen Pfad in Relation zum Stammverzeichnis des Dateisystems anzugeben. Zum Beispiel:

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

Der URL-Standard legt für eine Datei-URL das Format file://<Host>/<Pfad> fest. Ein möglicher Sonderfall wäre, dass <Host> ein leerer String ist, der als „der Rechner, von dem die URL interpretiert wird“ umgesetzt wird. Daher haben die URLs oft auch drei Schrägstriche (///).

app

Verwenden Sie dieses Schema, um einen Pfad in Relation zum Stammverzeichnis der installierten Anwendung anzugeben (der Anwendung, die die Datei „application.xml“ für die installierte Anwendung enthält). Der folgende Pfad zeigt zum Beispiel auf ein images-Unterverzeichnis der installierten Anwendung.

app:/images

app-storage

Verwenden Sie dieses Schema, um einen Pfad in Relation zum Anwendungsspeicherverzeichnis anzugeben. AIR definiert für jede installierte Anwendung ein Anwendungsspeicherverzeichnis, indem man anwendungsspezifische Daten speichern kann. Der folgende Pfad etwa verweist von einem File-Objekt auf eine Datei mit dem Namen „prefs.xml“ in einem settings-Verzeichnis des Anwendungsspeicherverzeichnisses:

app-storage:/settings/prefs.xml

Steuern der Dateisicherung und -zwischenspeicherung

Unter bestimmten Betriebssystemen, insbesondere iOS und Mac OS X, können Benutzer Anwendungsdateien automatisch in einem Remote-Speicher sichern. Unter iOS unterliegt es gewissen Einschränkungen, ob Dateien gesichert werden können und an welchem Ort Dateien für verschiedene Zwecke gespeichert werden können.

Die folgenden Punkte fassen zusammen, wie Sie die Richtlinien von Apple für die Dateisicherung und -speicherung einhalten. Weitere Informationen finden Sie in den nächsten Abschnitten.

  • Um anzugeben, dass eine Datei nicht gesichert werden muss und (nur iOS) vom Betriebssystem gelöscht werden kann, falls der Speicherplatz des Geräts nicht mehr ausreicht, speichern Sie die Datei im Cacheverzeichnis ( File.cacheDirectory ). Dies ist der bevorzugte Speicherort unter iOS und sollte für die meisten Dateien verwendet werden, die neu generiert oder heruntergeladen werden können.

  • Um anzugeben, dass eine Datei nicht gesichert werden muss, jedoch nicht vom Betriebssystem gelöscht werden soll, speichern Sie die Datei in einem der Verzeichnisse der Anwendungsbibliothek, z. B. im Anwendungsspeicherverzeichnis ( File.applicationStorageDirectory ) oder im Dokumentenverzeichnis ( File.documentsDirectory ). Setzen Sie die Eigenschaft preventBackup des File-Objekts auf true . Dies ist laut Apple erforderlich bei Inhalten, die neu generiert oder heruntergeladen werden können, jedoch für das einwandfreie Funktionieren Ihrer Anwendung bei Offline-Verwendung notwendig sind.

Angeben von Dateien für die Sicherung

Um Speicherplatz für die Datensicherung zu sparen und die Netzwerkbandbreite zu minimieren, geben die Richtlinien von Apple für iOS- und Mac-Anwendungen an, dass nur Dateien mit benutzerdefinierten Daten bzw. mit Daten, die nicht neu generiert oder herunterladen werden können, für die Sicherung vorgesehen werden sollen.

Standardmäßig werden alle Dateien in den Bibliotheksordnern der Anwendung gesichert. Unter Mac OS X ist dies das Anwendungsspeicherverzeichnis. Unter iOS umfasst dies das Anwendungsspeicherverzeichnis, das Anwendungsverzeichnis, das Desktopverzeichnis, das Dokumentenverzeichnis sowie das Benutzerverzeichnis (da diese Verzeichnisse den Bibliotheksordnern der Anwendung unter iOS zugeordnet sind). Somit werden alle Dateien in diesen Verzeichnissen standardmäßig im Serverspeicher gesichert.

Wenn Sie eine Datei, die von Ihrer Anwendung neu erstellt werden kann, an einen dieser Speicherorte speichern, markieren Sie die Datei, sodass das Betriebssystem sie nicht sichert. Um anzugeben, dass eine Datei nicht gesichert werden soll, setzen Sie die Eigenschaft preventBackup des File-Objekts auf true .

Unter iOS werden Dateien in einem der Bibliotheksordner der Anwendung als permanente Dateien markiert, die nicht vom Betriebssystem gelöscht werden sollen, selbst wenn die Eigenschaft preventBackup der Datei auf true gesetzt ist.

Steuern der Dateizwischenspeicherung und -löschung

Die Richtlinien von Apple für iOS legen fest, dass soweit möglich Inhalte, die neu generiert werden können, vom Betriebssystem gelöscht werden sollen, wenn der Speicherplatz nicht ausreicht.

Unter iOS werden Dateien in den Bibliotheksordnern der Anwendung (z. B. Anwendungsspeicherverzeichnis oder Dokumentenverzeichnis) als permanent markiert und vom Betriebssystem nicht gelöscht.

Speichern Sie Dateien, die von der Anwendung neu generiert und bei nicht ausreichendem Speicherplatz im Cacheverzeichnis der Anwendung gelöscht werden können. Greifen Sie mithilfe der statischen Eigenschaft File.cacheDirectory auf das Cacheverzeichnis zu.

Unter iOS entspricht das Cacheverzeichnis dem Cacheverzeichnis der Anwendung (<Application Home>/Library/Caches). Unter anderen Betriebssystemen ist dieses Verzeichnis einem vergleichbaren Verzeichnis zugeordnet. Unter Mac OS X ist es auch dem Cacheverzeichnis in der Anwendungsbibliothek zugeordnet. Unter Android ist das Cacheverzeichnis dem Cacheverzeichnis der Anwendung zugeordnet. Unter Windows ist das Cacheverzeichnis dem temporären Verzeichnis des Betriebssystems zugeordnet. Sowohl unter Android als auch unter Windows ist dies das Verzeichnis, auf das durch den Aufruf der createTempDirectory() - und createTempFile() -Methoden der File-Klasse zugegriffen wird.

Suchen nach dem relativen Pfad zwischen zwei Dateien

Mit der Methode getRelativePath() können Sie den relativen Pfad zwischen zwei Dateien ermitteln:

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 

Der zweite Parameter der Methode getRelativePath() , der Parameter useDotDot bewirkt, dass in den Ergebnissen die .. -Syntax verwendet werden kann, um übergeordnete Verzeichnisse zu bezeichnen:

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 

Abrufen der vorschriftsmäßigen Versionen von Dateinamen

Unter Windows und Mac OS muss die Groß- und Kleinschreibung für Datei- und Pfadnamen nicht beachtet werden. Im Folgenden zeigen zwei File-Objekte auf dieselbe Datei:

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

Allerdings wird in Dokument- und Verzeichnisnamen durchaus Groß- und Kleinschreibung verwendet. Im folgenden Code wird beispielsweise davon ausgegangen, dass sich im Verzeichnis „documents“ ein Ordner mit dem Namen „AIR Test“ befindet:

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

Die Methode canonicalize() konvertiert das Objekt nativePath , um die exakte Groß-/Kleinschreibung für den Datei- oder Verzeichnisnamen zu verwenden. Bei Systemen, die zwischen Groß- und Kleinschreibung unterscheiden (wie Linux), korrigiert die canonicalize() -Methode für den Fall, dass sich mehrere Dateien nur in der Groß- und Kleinschreibung unterscheiden, den Pfad, um ihn an die erste gefundene Datei anzupassen (die Reihenfolge wird dabei vom System bestimmt).

Unter Windows können Sie mithilfe der Methode canonicalize() auch kurze Dateinamen („8.3-Namen“) in lange Dateinamen konvertieren:

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

Arbeiten mit Paketen und symbolischen Links

Verschiedene Betriebssysteme unterstützen Paketdateien und Dateien für symbolische Links:

Pakete – Unter Mac OS können Verzeichnisse als Pakete gekennzeichnet werden und erscheinen dann im Mac OS-Finder als einzelne Dateien, nicht als Verzeichnisse.

Symbolische Vrknüpfungen – Mac OS, Linux und Windows Vista unterstützen symbolische Verknüpfungen. Symbolische Links ermöglichen, dass eine Datei auf eine andere Datei oder ein Verzeichnis auf der Festplatte zeigt. Obwohl sie sich ähneln, sind symbolische Links nicht dasselbe wie Aliasnamen. Ein Alias wird immer als Datei (nicht als Verzeichnis) betrachtet, und das Lesen und Schreiben von oder in einen Alias oder in eine Verknüpfung betrifft nie die ursprüngliche Datei oder das ursprüngliche Verzeichnis, auf die bzw. das verwiesen wird. Abgesehen davon verhält sich ein symbolischer Link genau wie die Datei oder das Verzeichnis, auf die bzw. das verwiesen wird. Der symbolische Link kann als Datei oder als Verzeichnis betrachtet werden. Das Lesen von einem oder Schreiben in einen symbolischen Link betrifft die Datei oder das Verzeichnis, auf die bzw. das verwiesen wird, nicht den symbolischen Link selbst. Unter Windows wird zusätzlich die isSymbolicLink -Eigenschaft für ein File-Objekt, das auf einen Verknüpfungspunkt (im NTFS-Dateisystem verwendet) verweist, mit dem Wert true belegt.

Die File-Klasse besitzt die Eigenschaften isPackage und isSymbolicLink , um zu überprüfen, ob ein File-Objekt auf ein Paket oder einen symbolischen Link verweist.

Der folgende Code durchläuft das Desktopverzeichnis des Benutzers und listet alle Unterverzeichnisse auf, die keine Pakete sind:

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

Der folgende Code durchläuft das Desktopverzeichnis des Benutzers und listet alle Dateien und Verzeichnisse auf, die keine symbolische Links sind:

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

Die Methode canonicalize() ändert den Pfad eines symbolischen Links so, dass er auf die Datei oder das Verzeichnis zeigt, auf die bzw. das der Link verweist. Der folgende Code durchläuft das Desktopverzeichnis des Benutzers und erstellt einen Bericht über alle Pfade, auf die von Dateien verwiesen wird, die symbolische Links sind:

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

Ermitteln des auf einem Datenträger verfügbaren Speicherplatzes

Die Eigenschaft spaceAvailable eines File-Objekts bezeichnet den Speicherplatz in Byte, der an diesem Dateispeicherort zur Verfügung steht. Im folgenden Beispielcode wird der im Anwendungsspeicherverzeichnis verfügbare Speicherplatz überprüft:

trace(File.applicationStorageDirectory.spaceAvailable); 

Wenn das File-Objekt auf ein Verzeichnis verweist, gibt die spaceAvailable -Eigenschaft an, wie viel Speicherplatz die Dateien in diesem Verzeichnis einnehmen können. Wenn das File-Objekt auf eine Datei verweist, gibt die Eigenschaft spaceAvailable an, wie groß die Datei werden kann. Wenn der Dateispeicherort nicht vorhanden ist, wird die Eigenschaft spaceAvailable auf 0 eingestellt. Wenn das File-Objekt auf einen symbolischen Link verweist, entspricht der Wert, auf den die Eigenschaft spaceAvailable gesetzt wird, dem verfügbaren Speicherplatz an dem Speicherort, auf den der symbolische Link verweist.

Normalerweise ist der für ein Verzeichnis oder eine Datei verfügbare Speicherplatz identisch mit dem Speicherplatz, der auf dem Datenträger mit der Datei bzw. dem Verzeichnis verfügbar ist. Der verfügbare Speicherplatz kann jedoch auch Speicherkontingente und verzeichnisspezifische Limits berücksichtigen.

Wenn Sie einem Datenträger eine Datei oder ein Verzeichnis hinzufügen, wird dabei im Allgemeinen mehr Speicherplatz benötigt, als die Datei bzw. der Inhalt des Verzeichnisses tatsächlich belegen. Das Betriebssystem kann zum Beispiel zusätzlichen Speicherplatz zum Speichern von Indexinformationen benötigen. Auch Festplattensektoren benötigen unter Umständen zusätzlichen Speicher. Der verfügbare Speicherplatz ändert sich zudem dynamisch. Sie können also nicht davon ausgehen, dass Sie den gesamten gemeldeten Speicherplatz für das Speichern von Dateien verwenden können. Informationen dazu, wie Sie ins Dateisystem schreiben, finden Sie unter Lese- und Schreibvorgänge in Dateien .

Die StorageVolumeInfo.getStorageVolumes() -Methode liefert ausführlichere Informationen über gemountete Speichermedien (siehe Arbeiten mit Speichermedien ).

Öffnen von Dateien mit der Standardsystemanwendung

In AIR 2 können Sie eine Datei mit der Anwendung öffnen, die im Betriebssystem zum Öffnen der jeweiligen Datei registriert ist. Beispielsweise kann eine AIR-Anwendung eine DOC-Datei mit der dafür registrierten Anwendung öffnen. Verwenden Sie die openWithDefaultApplication() -Methode eines File-Objekts zum Öffnen der Datei. Mit dem folgenden Code wird beispielsweise eine Datei namens „test.doc“ auf dem Desktop des Anwenders mit der Standardanwendung für DOC-Dateien geöffnet:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Hinweis: Unter Linux bestimmt nicht die Dateierweiterung, sondern der MIME-Typ die Standardanwendung für eine Datei.

Mit dem folgenden Code können Sie zu einer MP3-Datei navigieren und sie in der Standardanwendung zum Abspielen von MP3-Dateien öffnen.

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

Die openWithDefaultApplication() -Methode kann nicht mit Dateien verwendet werden, die sich im Anwendungsverzeichnis befinden.

AIR verhindert das Öffnen bestimmter Dateien mit der openWithDefaultApplication() -Methode. Unter Windows verhindert AIR das Öffnen von Dateien mit bestimmten Dateitypen, wie beispielsweise EXE oder BAT. Unter Mac OS und Linux verhindert AIR, dass Sie Dateien öffnen, die in bestimmten Anwendungen gestartet werden. (Dazu zählen Terminal und AppletLauncher unter Mac OS sowie csh, bash und ruby unter Linux.) Wenn Sie versuchen, eine dieser Dateien mit der openWithDefaultApplication() -Methode zu öffnen, wird ein Ausnahmefehler ausgegeben. Eine vollständige Liste der Dateitypen, die nicht geöffnet werden können, finden Sie im Referenzhandbuch im Eintrag für die File.openWithDefaultApplication() -Methode.

Hinweis: Diese Einschränkung gilt nicht für AIR-Anwendungen, die über ein natives Installationsprogramm installiert wurden (erweiterte Desktop-Anwendung).