Arbeiten mit File-Objekten in AIRAdobe 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 jedoch 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-KlasseMit der File-Klasse können Sie folgende Aktionen ausführen:
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-ObjektenJedes File-Objekt hat zwei Eigenschaften, die jeweils seinen Pfad definieren:
Die File-Klasse enthält statische Eigenschaften, um auf Standardverzeichnisse von MAC OS, Windows und Linux zu zeigen. Zu diesen Eigenschaften gehören:
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.
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. Verzeichnisansicht für AIR für TV-AnwendungenZur Gewährleistung der Sicherheit der Systemdateien auf AIR für TV-Geräten kann eine AIR-Anwendung nur auf einen eingeschränkten Verzeichnissatz zugreifen. Der Zugriff auf alle anderen Verzeichnisse durch die Anwendung wird von AIR für TV verhindert. Außerdem isoliert AIR für TV die benutzerspezifischen Daten eines jeden Benutzers für jede AIR-Anwendung. Die AIR-Anwendung verwendet Verzeichnisnamen, die nur zur Verwendung in ActionScript 3.0 vorgesehen sind. Diese Namen bezeichnen keine tatsächlichen Verzeichnisse auf dem Gerät. AIR für TV ordnet diese ActionScript 3.0-Verzeichnisnamen den tatsächlichen Geräteverzeichnissen zu. Durch diese Zuordnung wird verhindert, dass AIR für TV-Anwendungen absichtlich oder versehentlich auf lokale Dateien zugreifen, die ihnen nicht gehören. Die ActionScript 3.0-Verzeichnisnamen lauten:
Wenn eine Anwendung versucht, auf ein verbotenes Verzeichnis zuzugreifen, löst die Laufzeit einen Ausnahmefehler aus, der vom ActionScript-Code abgefangen werden kann. Die folgende Tabelle zeigt die File.nativePath-Werte für verschiedene File-Eigenschaften und -Methoden. Dabei wird berücksichtigt, dass die Anwendung nur eingeschränkten Zugriff auf das Dateisystem des Geräts hat.
Beachten Sie auch das Verhalten der folgenden Methoden auf AIR für TV-Geräten:
Verweisen vom File-Objekt auf ein VerzeichnisEs gibt verschiedene Möglichkeiten, um ein File-Objekt so einzurichten, dass es auf ein Verzeichnis zeigt. Verweisen auf das Stammverzeichnis eines BenutzersSie 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 BenutzersSie 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 BenutzersSie 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 AnwendungsspeicherverzeichnisSie 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:
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 AnwendungsverzeichnisSie 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 Stammverzeichnis des DateisystemsDie 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 VerzeichnisSie 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 VerzeichnispfadenMit 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 VerzeichnisstrukturDie 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. Sie 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, müssen Sie stattdessen ein benutzerdefiniertes Dialogfeld für die Anwendung bereitstellen.
Verweisen auf das Verzeichnis, von dem aus die Anwendung aufgerufen wurdeSie 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 DateiEs gibt verschiedene Möglichkeiten, um die Datei festzulegen, auf die ein File-Objekt zeigt. Verweisen auf einen bestimmten VerzeichnispfadWichtig: 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 VerzeichnisMithilfe 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 VerzeichnisstrukturDie 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.
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. Ändern von DateipfadenSie 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-SchemataIn AIR können Sie beim Definieren der url-Eigenschaft eines File-Objekts eines der folgenden URL-Schemata verwenden:
Suchen nach dem relativen Pfad zwischen zwei DateienMit 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 DateinamenUnter 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 LinksVerschiedene 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 SpeicherplatzesDie 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 Eigenschaft spaceAvailable an, wieviel 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 spaceAvailablegesetzt 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 StandardsystemanwendungIn 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 mit einem nativen Installationsprogramm installiert wurden (erweiterte Desktop-Anwendung). Einzelheiten finden Sie im Abschnitt Verpacken einer AIR-Anwendung in einem nativen Installationsprogramm.
|
|