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