Praca z obiektami File w środowisku AIR

Adobe AIR 1.0 i starsze wersje

Obiekt File jest wskaźnikiem do pliku lub katalogu w systemie plików.

Klasa File stanowi rozszerzenie klasy FileReference. Klasa FileReference, która jest dostępna w programie Adobe® Flash® Player, a także w środowisku AIR, reprezentuje wskaźnik do pliku. Klasa File dodaje właściwości i metody, które nie są dostępne w programie Flash Player (w pliku SWF działającym w przeglądarce) ze względów bezpieczeństwa.

Informacje o klasie File

Klasa File może służyć do wykonywania następujących czynności:

  • Pobieranie ścieżki do katalogów specjalnych, między innymi do katalogu użytkownika, katalogu dokumentów użytkownika, katalogu aplikacji oraz katalogu, z którego została uruchomiona aplikacja

  • Kopiowanie plików i katalogów

  • Przenoszenie plików i katalogów

  • Usuwanie plików i katalogów (lub przenoszenie ich do kosza)

  • Wyświetlanie list plików i katalogów zawartych w katalogu

  • Tworzenie tymczasowych plików i folderów

Jeśli obiekt File wskazuje na ścieżkę pliku, można użyć go w celu odczytania lub zapisania danych pliku za pomocą klasy FileStream.

Obiekt File może wskazywać na ścieżkę pliku lub katalog, który jeszcze nie istnieje. Taki obiekt File może zostać wykorzystany podczas tworzenia pliku lub katalogu.

Ścieżki obiektów File

Każdy obiekt File ma dwie właściwości, które definiują jego ścieżkę:

Właściwość

Opis

nativePath

Określa ścieżkę do pliku właściwą dla platformy. Na przykład: w systemie Windows ścieżka może być następująca „c:\Przykładowy katalog\test.txt”, a w systemie Mac OS może być taka: „/Przykładowy katalog/test.txt”. Właściwość nativePath wykorzystuje znak ukośnika w lewo (\) jako separator katalogów w systemie Windows, a w systemie Mac OS i Linux wykorzystuje ukośnik w prawo (/).

url

Dzięki temu możliwe jest użycie schematu adresu URL pliku w celu wskazania na plik. Na przykład: w systemie Windows ścieżka może być następująca „file:///c:/Przykładowy%20katalog/test.txt”, a w systemie Mac OS może być taka: „file:///Przykładowy%20katalog/test.txt”. Środowisko wykonawcze zawiera również inne specjalne schematy URL oprócz schematów file i zostały one opisane w sekcji Schematy URL obsługiwane w środowisku AIR

Klasa File zawiera statyczne właściwości przeznaczone do wskazywania na standardowe katalogi w systemie Mac OS, Windows i Linux. Do właściwości tych należą:

  • File.applicationStorageDirectory — katalog przechowywania danych, osobny dla każdej zainstalowanej aplikacji AIR. Ten katalog jest odpowiednim miejscem do przechowywania dynamicznych zasobów aplikacji i preferencji użytkownika. Duże ilości danych należy przechowywać w innych miejscach.

    W systemach Android i iOS katalog magazynu aplikacji jest usuwany, gdy użytkownik odinstalowuje aplikację lub wybiera opcję czyszczenia danych aplikacji. Nie dzieje się tak na innych platformach.

  • File.applicationDirectory — katalog, w którym jest zainstalowana aplikacja (wraz z ewentualnymi zainstalowanymi zasobami). W niektórych systemach operacyjnych aplikacja jest przechowywana w jednym pliku pakietu, a nie w katalogu fizycznym. W takim przypadku dostęp do zawartości za pomocą macierzystej ścieżki może być niemożliwy. Katalog aplikacji jest przeznaczony tylko do odczytu.

  • File.desktopDirectory — katalog pulpitu użytkownika. Jeśli platforma nie definiuje katalogu pulpitu, jest używana inna lokalizacja w systemie plików.

  • File.documentsDirectory — katalog dokumentów użytkownika. Jeśli platforma nie definiuje katalogu dokumentów, jest używana inna lokalizacja w systemie plików.

  • File.userDirectory — katalog użytkownika. Jeśli platforma nie definiuje katalogu użytkownika, jest używana inna lokalizacja w systemie plików.

Uwaga: Gdy platforma nie definiuje standardowych lokalizacji katalogów pulpitu, dokumentów ani użytkownika, właściwości File.documentsDirectory , File.desktopDirectory i File.userDirectory mogą odnosić się do tego samego katalogu.

Te właściwości mają różne wartości w różnych systemach operacyjnych. Na przykład w systemach Mac OS i Windows ścieżki do katalogu pulpitu użytkownika są różne. Na każdej platformie właściwość File.desktopDirectory wskazuję odpowiednią ścieżkę katalogu. Aby aplikacja działała prawidłowo na różnych platformach, należy używać tych właściwości w odwołaniach do innych katalogów i plików wykorzystywanych przez aplikację. Metoda resolvePath() umożliwia dalsze doprecyzowanie ścieżki. Na przykład ten kod wskazuje plik preferences.xml w katalogu przechowywania danych aplikacji:

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

Mimo że klasa File umożliwia wskazanie pliku w konkretnej ścieżce, postępowanie takie może doprowadzić do nieprawidłowego działania aplikacji na różnych platformach. Na przykład ścieżka C:\Documents and Settings\janek\ jest prawidłowa tylko w systemie Windows. Dlatego lepszym rozwiązaniem jest użycia właściwości statycznych klasy File, takich jak File.documentsDirectory .

Typowe lokalizacje katalogów

Platforma

Typ katalogu

Typowa lokalizacja w systemie plików

Android

Aplikacja

/data/data/

Magazyn aplikacji

/data/data/air.ID_aplikacji/nazwa_pliku/Local Store

Bufor

/data/data/applicationID/cache

Komputer

/mnt/sdcard

Dokumenty

/mnt/sdcard

Tymczasowy

/data/data/ID_aplikacji/cache/FlashTmp.losowy_ciag

Użytkownika

/mnt/sdcard

iOS

Aplikacja

/var/mobile/Applications/uid/nazwa_pliku.app

Magazyn aplikacji

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

Bufor

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

Komputer

niedostępny

Dokumenty

/var/mobile/Applications/uid/Documents

Tymczasowy

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

Użytkownika

niedostępny

Linux

Aplikacja

/opt/nazwa_pliku/share

Magazyn aplikacji

/home/nazwa_uzytkownika/.appdata/ID_aplikacji/Local Store

Komputer

/home/nazwa_uzytkownika/Desktop

Dokumenty

/home/nazwa_uzytkownika/Documents

Tymczasowy

/tmp/FlashTmp.randomString

Użytkownika

/home/nazwa_uzytkownika

Mac

Aplikacja

/Programy/nazwa_pliku.app/Contents/Resources

Magazyn aplikacji

/Users/ nazwa_uzytkownika /Biblioteki/Preferences/ applicationid /Local Store (AIR 3.2 i starsze wersje)

sciezka /Biblioteki/Application Support/ identyfikator_aplikacji /Local Store (AIR 3.3 i nowsze wersje), gdzie „sciezka” oznacza folder /Uzytkownicy/ nazwa_uzytkownika /Biblioteki/Containers/ identyfikator_pakietu /Data (w środowisku obszaru izolowanego) lub /Uzytkownicy/nazwa_uzytkownika (poza środowiskiem obszaru izolowanego)

Bufor

/Users/userName/Library/Caches

Komputer

/Uzytkownicy/ nazwa_uzytkownika /Biurko

Dokumenty

/Uzytkownicy/ nazwa_uzytkownika /Dokumenty

Tymczasowy

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

Użytkownika

/Uzytkownicy/ nazwa_uzytkownika

Windows

Aplikacja

C:\Program Files\nazwa_pliku

Magazyn aplikacji

C:\Documents and settings\nazwa_uzytkownika\Dane aplikacji\ID_aplikacji\Local Store

Bufor

C:\Documents and settings\nazwa_uzytkownika\Ustawienia lokalne\Temp

Komputer

C:\Documents and settings\nazwa_uzytkownika\Desktop

Dokumenty

C:\Documents and settings\nazwa_uzytkownika\Moje dokumenty

Tymczasowy

C:\Documents and settings\nazwa_uzytkownika\Ustawienia lokalne\Temp\randomString.tmp

Użytkownika

C:\Documents and settings\nazwa_uzytkownika

Rzeczywiste ścieżki macierzyste tych katalogów zależą od systemu operacyjnego i konfiguracji komputera. Ścieżki przedstawione w tabeli są typowymi przykładami. Aby aplikacja prawidłowo działała na każdej platformie, do tych katalogów należy zawsze odnosić się za pomocą odpowiednich statycznych właściwości klasy File. W rzeczywistej aplikacji środowiska AIR wartości ID_aplikacji i nazwa_pliku pokazane w tabeli pochodzą z deskryptora aplikacji. Jeśli w deskryptorze aplikacji zostanie określony identyfikator wydawcy, wówczas w tych ścieżkach do identyfikatora aplikacji zostanie dodany identyfikator wydawcy. Wartość nazwa_uzytkownika jest nazwą konta użytkownika przeprowadzającego instalację.

Wskazywanie obiektu File na katalog

Istnieją różne sposoby konfigurowania obiektu File w taki sposób, aby wskazywał na katalog.

Wskazywanie na katalog osobisty użytkownika

Obiekt File może wskazywać na katalog osobisty użytkownika. Poniższy kod ustawia obiekt File w taki sposób, aby wskazywał na podkatalog AIR Test katalogu osobistego:

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

Wskazywanie na katalog dokumentów użytkownika

Obiekt File może wskazywać na katalog dokumentów użytkownika. Poniższy kod ustawia obiekt File w taki sposób, aby wskazywał na podkatalog AIR Test katalogu dokumentów:

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

Wskazywanie na katalog na pulpicie

Obiekt File może wskazywać na katalog znajdujący się na pulpicie. Poniższy kod ustawia obiekt File w taki sposób, aby wskazywał na podkatalog AIR Test znajdujący się na pulpicie:

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

Wskazywanie na katalog zapisu aplikacji

Obiekt File może wskazywać na katalog zapisu aplikacji. Dla każdej aplikacji AIR istnieje unikalna skojarzona ścieżka, która definiuje katalog zapisu aplikacji. Ten katalog jest unikalny dla każdej aplikacji i każdego użytkownika. W tym katalogu można zapisywać dane dot. aplikacji dla konkretnego użytkownika (np. dane użytkownika lub pliki preferencji). Przykład: poniższy kod ustawia obiekt File w taki sposób, aby wskazywał na plik preferencji prefs.xml zawarty w katalogu zapisu aplikacji:

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

Lokalizacja katalogu zapisu aplikacji jest zazwyczaj oparta na nazwie użytkownika i identyfikatorze aplikacji. Podane poniżej lokalizacje w systemie plików mogą być pomocne przy debugowaniu aplikacji. Należy zawsze używać właściwości File.applicationStorage lub schematu URI app-storage: do sprawdzania plików w tym katalogu:

  • W systemie Mac OS — zależnie od wersji środowiska AIR:

    AIR 3.2 i starsze wersje : /Uzytkownicy/nazwa_uzytkownika/Biblioteki/Preferences/ identyfikator_aplikacji /Local Store/

    AIR 3.3 i nowsze wersje : sciezka /Biblioteki/Application Support/ identyfikator_aplikacji /Local Store , gdzie sciezka oznacza folder /Uzytkownicy/ nazwa_uzytkownika /Biblioteki/Containers/ identyfikator_pakietu /Data (w środowisku obszaru izolowanego) lub /Uzytkownicy/ nazwa_uzytkownika (poza środowiskiem obszaru izolowanego)

    Przykład (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • W systemie Windows: w katalogu Documents and Settings:

    C:\Documents and Settings\user name \Application Data\ ID_aplikacji \Local Store\

    Na przykład:

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • W systemie Linux:

    /home/ nazwa użytkownika /.appdata/ id_aplikacji /Local Store/

    Na przykład:

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • W systemie Android — w katalogu:

    /data/data/ androidPackageID / ID_aplikacji/Local Store

    Na przykład:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Uwaga: Jeśli dla aplikacji istnieje identyfikator wydawcy, wówczas identyfikator ten również jest używany jako część ścieżki do katalogu zapisu aplikacji.

Adres URL (i właściwość url ) dla obiektu File utworzonego w katalogu File.applicationStorageDirectory korzysta ze schematu URL app-storage (patrz Schematy URL obsługiwane w środowisku AIR ), co przedstawiono poniżej:

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

Wskazywanie na katalog aplikacji

Obiekt File może wskazywać na katalog, w którym została zainstalowana aplikacja — jest to tzw. katalog aplikacji. Za pomocą właściwości File.applicationDirectory można tworzyć dowołania do tego katalogu. Za pomocą tego katalogu można sprawdzić plik deskryptora aplikacji lub inne zasoby zainstalowane w aplikacji. Na przykład: poniższy kod ustawia obiekt File w taki sposób, aby wskazywał na katalog images w katalogu aplikacji:

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

Adres URL (i właściwość url ) dla obiektu File utworzonego w File.applicationDirectory korzysta ze schematu URL app (patrz Schematy URL obsługiwane w środowisku AIR ), co przedstawiono poniżej:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Uwaga: W systemie Android nie można uzyskać dostępu do pakietu aplikacji za pomocą właściwości nativePath . Właściwość nativePath jest pustym ciągiem. Do uzyskiwania dostępu do plików w katalogu aplikacji należy używać adresu URL, a nie ścieżki macierzystej.

Wskazywanie katalogu bufora

Korzystając z właściwości File.cacheDirectory , można wskazać katalog tymczasowy lub katalog bufora w obiekcie File. Ten katalog zawiera pliki, które nie są wymagane do uruchomienia aplikacji i których usunięcie nie powoduje problemów ani utraty danych dla użytkownika.

W większości systemów operacyjnych katalog bufora jest katalogiem tymczasowym. W systemie iOS katalog bufora znajduje się w katalogu Caches biblioteki aplikacji. Pliki znajdujące się w tym katalogu nie są objęte kopią zapasową tworzoną w magazynie online i mogą być usuwane przez system operacyjny, jeśli brakuje miejsca w pamięci urządzenia. Więcej informacji można znaleźć w artykule Sterowanie kopiami zapasowymi i buforowaniem plików .

Wskazywanie katalogu głównego systemu plików

Metoda File.getRootDirectories() zawiera listę wszystkich woluminów głównych, takich jak C:, oraz woluminów podłączonych, w komputerze z systemem Windows. W systemie Mac OS i Linux ta metoda zawsze zwraca unikalny katalog główny komputera (katalog „/”). Metoda StorageVolumeInfo.getStorageVolumes() udostępnia bardziej szczegółowe informacje o podłączonych woluminach pamięci masowej (zobacz Praca z woluminami pamięci masowej ).

Uwaga: W systemie Android nie można odczytać katalogu głównego systemu plików. Obiekt File odwołujący się do katalogu za pomocą ścieżki macierzystej („/”) jest zwracany, ale właściwości tego obiektu nie mają dokładnych wartości. Na przykład właściwość spaceAvailable ma zawsze wartość 0.

Wskazywanie na katalog jawny

Obiekt File może wskazywać na katalog jawny — w tym celu należy ustawić właściwość nativePath obiektu File, jak w poniższym przykładzie (w systemie Windows):

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

Ważne: Wskazanie w opisany sposób konkretnej ścieżki może spowodować, że kod nie będzie przenośny między platformami. Poprzedni przykład działa tylko w systemie Windows. Aby wskazać katalog w sposób niezależny od platformy, należy użyć właściwości statycznych obiektu File, takich jak File.applicationStorageDirectory / Następnie należy skorzystać z metody resolvePath() (opisanej w następnej sekcji) w celu przejścia do ścieżki względnej.

Nawigacja do ścieżek względnych

Za pomocą metody resolvePath() można uzyskiwać ścieżkę względną do określonej innej ścieżki. Na przykład: poniższy kod ustawia obiekt File w taki sposób, aby wskazywał na podkatalog „AIR Test” katalogu osobistego:

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

Można również użyć właściwości url obiektu File, aby wskazywał on na katalog na podstawie ciągu znaków URL, jak w poniższym przykładzie:

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

Więcej informacji zawiera sekcja Modyfikowanie ścieżek File .

Zezwalanie użytkownikowi na przeglądanie w celu wybrania katalogu

Klasa File zawiera metodę browseForDirectory() , która powoduje wyświetlenie systemowego okna dialogowego, w którym użytkownik może wybrać podkatalog, jaki zostanie przypisany do obiektu. Metoda browseForDirectory() jest asynchroniczna. Obiekt File wywołuje zdarzenie select , gdy użytkownik wybierze katalog i kliknie przycisk Otwórz, lub wywołuje zdarzenie cancel , gdy użytkownik kliknie przycisk Anuluj.

Przykład: poniższy kod umożliwia użytkownikowi wybranie katalogu, a po wybraniu generuje ścieżkę katalogu:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Uwaga: W systemie Android metoda browseForDirectory() nie jest obsługiwana. Wywołanie tej metody nie daje żadnego efektu — jest natychmiast wywoływane anulowanie zdarzenia. Aby użytkownicy mogli wybrać katalog, należy zamiast tego użyć własnego okna dialogowego zdefiniowanego w aplikacji.

Wskazywanie na katalog, z którego aplikacja została wywołana

W celu uzyskania lokalizacji katalogowej, z której aplikacja została wywołana, należy sprawdzić wartość właściwości currentDirectory obiektu InvokeEvent wywołanego przy wywołaniu aplikacji. Szczegółowe informacje zawiera sekcja Przechwytywanie argumentów wiersza poleceń .

Wskazywanie obiektu File na plik

Istnieją różne sposoby ustawiania pliku, na który ma wskazywać obiekt File.

Wskazywanie na jawną ścieżkę pliku

Ważne: Wskazanie konkretnej ścieżki może spowodować, że kod nie będzie przenośny między platformami. Na przykład ścieżka C:/foo.txt jest prawidłowa tylko w systemie Windows. Aby wskazać katalog w sposób niezależny od platformy, należy użyć właściwości statycznych obiektu File, takich jak File.applicationStorageDirectory . Następnie należy skorzystać z metody resolvePath() (zobacz Modyfikowanie ścieżek File ) w celu przejścia do ścieżki względnej.

Można użyć właściwości url obiektu File, aby wskazywał on na plik lub katalog na podstawie ciągu znaków URL, jak w poniższym przykładzie:

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

Możliwe jest również przekazanie adresu URL do funkcji konstruktora File() , jak w poniższym przykładzie:

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

Właściwość url zawsze zwraca zakodowaną wersję URL (na przykład: spacje zastąpione znakami "%20 ):

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

W celu ustawienia ścieżki jawnej obiektu File można również użyć właściwości nativePath . Przykład: poniższy kod uruchomiony w komputerze z systemem Windows ustawia obiekt File na plik test.txt w podkatalogu AIR Test na dysku C:

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

Tę ścieżkę można również przekazać do funkcji konstruktora File() , co przedstawiono poniżej:

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

Jako ogranicznika elementów ścieżki we właściwości nativePath należy używać ukośnika (/). W systemie Windows dozwolone jest także użycie ukośnika odwrotnego (\), jednak użycie tego znaku powoduje, że aplikacja nie będzie przenośna między platformami.

Więcej informacji zawiera sekcja Modyfikowanie ścieżek File .

Wyliczanie plików w katalogu

Za pomocą metody getDirectoryListing() obiektu File można uzyskać tablicę obiektów File wskazujących na pliki i podkatalogi na najwyższym poziomie katalogu. Więcej informacji zawiera sekcja Wyliczanie katalogów .

Zezwalanie użytkownikowi na przeglądanie w celu wybrania pliku

Klasa File zawiera następujące metody, które powodują wyświetlenie systemowego okna dialogowego, w którym użytkownik może wybrać plik, jaki zostanie przypisany do obiektu:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Każda z tych metod jest asynchroniczna. Metody browseForOpen() i browseForSave() wywołują zdarzenie select, gdy użytkownik wybierze plik (lub ścieżkę docelową w przypadku metody browseForSave()). W przypadku metod browseForOpen() i browseForSave() wybranie powoduje, że docelowy obiekt File wskazuje na wybrane pliki. Metoda browseForOpenMultiple () wywołuje zdarzenie selectMultiple , gdy użytkownik wybierze pliki. Zdarzenie selectMultiple jest typu FileListEvent, który zawiera właściwość files będącą tablicą obiektów File (wskazują na wybrane pliki).

Przykład: poniższy kod powoduje wyświetlenie okna dialogowego „Otwórz”, w którym użytkownik może wybrać plik:

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

Jeśli aplikacja zawiera inne okno dialogowe przeglądarki, które zostało otwarte po wywołaniu metody przeglądania, wówczas podczas wykonywania zwracany jest wyjątek Error.

Uwaga: W systemie Android za pomocą metod browseForOpen() i browseForOpenMultiple() można wybierać tylko pliki obrazów, wideo i audio. Również w oknie dialogowym browseForSave() są wyświetlane tylko pliki multimedialne, chociaż użytkownik może wpisać dowolną nazwę pliku. W przypadku plików innych niż pliki multimedialne należy rozważyć użycie zamiast tych metod własnych okien dialogowych.

Modyfikowanie ścieżek File

Ścieżkę istniejącego obiektu File można również zmodyfikować poprzez wywołanie metody resolvePath() albo modyfikację właściwości nativePath lub url obiektu, jak w poniższych przykładach (w systemie 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 

Jako znaku separującego katalogi we właściwości nativePath należy używać ukośnika (/). W systemie Windows dozwolone jest także użycie ukośnika odwrotnego (\), jednak użycie go spowoduje, że aplikacja nie będzie przenośna między platformami.

Schematy URL obsługiwane w środowisku AIR

W programie AIR podczas definiowania właściwości url obiektu File można korzystać z następujących schematów URL:

Schemat URL

Opis

file

Służy do określania ścieżki względnej do katalogu głównego systemu plików. Na przykład:

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

Standard URL określa, że adres URL pliku ma format: file://<host>/<path> . W szczególnym przypadku część <host> może zawierać pusty łańcuch, co jest interpretowane jako „komputer, z którego adres URL jest interpretowany”. Z tego powodu adresy URL file często zawierają trzy ukośniki (///).

app

Służy do określania ścieżki względnej dla katalogu głównego zainstalowanej aplikacji (katalog, który zawiera plik application.xml zainstalowanej aplikacji). Przykład: poniższa ścieżka wskazuje na podkatalog images katalogu zainstalowanej aplikacji:

app:/images

app-storage

Służy do określania ścieżki względnej do katalogu zapisu aplikacji. Dla każdej zainstalowanej aplikacji program AIR definiuje unikalny katalog zapisu aplikacji, który jest użytecznym miejscem zapisu danych dla tej aplikacji. Na przykład: poniższa ścieżka wskazuje na plik prefs.xml w podkatalogu settings katalogu zapisu aplikacji:

app-storage:/settings/prefs.xml

Sterowanie kopiami zapasowymi i buforowaniem plików

Niektóre systemy operacyjne, w szczególności systemy iOS i Mac OS X, umożliwiają użytkownikom automatyczne wykonywanie kopii zapasowych plików aplikacji w magazynie zdalnym. W systemie iOS występują ograniczenia dotyczące możliwości wykonywania kopii zapasowych plików i miejsc przechowywania plików zależnie od ich przeznaczenia.

Poniżej wyjaśniono pokrótce, jak uzyskać zgodność ze wskazówkami firmy Apple dotyczącymi wykonywania kopii zapasowych plików i korzystania z pamięci masowej. Więcej informacji można znaleźć w dalszych sekcjach.

  • Aby oznaczyć plik jako niewymagający tworzenia kopii zapasowych i możliwy do usunięcia (tylko w systemie iOS) w przypadku niedoboru miejsca w pamięci urządzenia, zapisz plik w katalogu bufora ( File.cacheDirectory ). Jest to preferowana lokalizacja magazynu w systemie iOS. Należy w niej umieszczać większość plików, które mogą zostać ponownie wygenerowane lub pobrane.

  • Aby oznaczyć plik jako niewymagający tworzenia kopii zapasowych, ale też niepodlegający usuwaniu przez system operacyjny, zapisz plik w jednym z katalogów biblioteki aplikacji, na przykład w katalogu magazynu aplikacji ( File.applicationStorageDirectory ) lub katalogu dokumentów ( File.documentsDirectory ). Ustaw właściwość preventBackup obiektu File na wartość true . Firma Apple wymaga tego w przypadku zawartości możliwej do ponownego wygenerowania lub pobrania. Nie jest to konieczne do właściwego działania aplikacji podczas jej używania offline.

Określanie plików objętych kopią zapasową

W celu zmniejszenia ilości miejsca przeznaczonego na kopię zapasową i ograniczenia użycia przepustowości sieci firma Apple zaleca, aby aplikacje dla systemów iOS i Mac OS wskazywały do wykonywania kopii zapasowych tylko te pliki, które zawierają dane wprowadzone przez użytkownika lub z innego powodu niemożliwe do ponownego wygenerowania albo pobrania.

Domyślnie kopia zapasowa obejmuje wszystkie pliki w folderach biblioteki aplikacji. W systemie Mac OS X jest to katalog magazynu aplikacji. W systemie iOS są to katalogi magazynu aplikacji, aplikacji, pulpitu, dokumentów i użytkownika (ponieważ w tym systemie te katalogi są odwzorowane na foldery biblioteki aplikacji). Domyślnie na serwerze magazynu jest wykonywana kopia zapasowa wszystkich plików znajdujących się w wymienionych katalogach.

Jeśli w jednej z tych lokalizacji jest zapisywany plik, który aplikacja może ponownie utworzyć, należy ustawić dla niego flagę wskazującą systemowi operacyjnemu, że nie należy wykonywać kopii zapasowej pliku. Aby wskazać plik jako niewymagający tworzenia kopii zapasowej, ustaw właściwość preventBackup obiektu File na wartość true .

Jeśli plik znajduje się w dowolnym z folderów biblioteki aplikacji w systemie iOS, to jest oznaczony jako plik trwały, którego system operacyjny nie powinien usuwać — nawet w przypadku ustawienia właściwości preventBackup na wartość true .

Sterowanie buforowaniem i usuwaniem plików

Firma Apple zaleca, aby — o ile tylko jest to możliwe — zawartość możliwa do ponownego wygenerowania przez aplikacje dla systemu iOS była udostępniana do usunięcia przez system operacyjny w sytuacji, gdy zacznie brakować miejsca w pamięci urządzenia.

Pliki znajdujące się w folderach biblioteki aplikacji systemu iOS (na przykład w katalogach magazynu aplikacji czy dokumentów) są oznaczone jako trwałe i nie podlegają usuwaniu przez system operacyjny.

Pliki, które aplikacja może ponownie wygenerować i które można bezpiecznie usunąć w przypadku niedoboru miejsca w pamięci, należy zapisywać w katalogu bufora aplikacji. Dostęp do katalogu bufora zapewnia właściwość stała File.cacheDirectory .

W systemie iOS katalog bufora odpowiada katalogowi bufora danej aplikacji (<katalog główny aplikacji>/Library/Caches). W innych systemach operacyjnych ten katalog jest odwzorowywany w podobny sposób. Na przykład w systemie Mac OS X jest to również katalog Caches w bibliotece aplikacji. W systemie Android katalog bufora jest odwzorowany na katalog bufora aplikacji. W systemie Windows katalog bufora jest odwzorowany na katalog tymczasowy systemu operacyjnego. W systemach Android i Windows wywołanie metody createTempDirectory() lub createTempFile() klasy File powoduje uzyskanie dostępu do tego samego katalogu.

Znajdowanie ścieżki względnej między dwoma plikami

Metoda getRelativePath() służy do wyszukiwania ścieżki względnej między dwoma plikami:

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 

Drugi parametr metody getRelativePath() — parametr useDotDot — umożliwia zwrot składni .. w wynikach w celu oznaczenia katalogów nadrzędnych:

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 

Uzyskiwanie kanonicznych wersji nazw plików

W systemach Windows i Mac OS w nazwach plików i ścieżek nie jest rozróżniana wielkość liter. W poniższym kodzie dwa obiekty File wskazują na ten sam plik:

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

Jednak nazwy dokumentów i katalogów mogą zawierać wielkie litery. Przykład: w poniższym kodzie obowiązuje założenie, że istnieje folder AIR Test w katalogu documents, jak w poniższych przykładach:

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

Metoda canonicalize() konwertuje obiekt nativePath w celu użycia poprawnej wielkości liter dla nazwy pliku i katalogu. W systemach, w których jest rozróżniana wielkość liter (np. w systemie Linux), gdy istnieje wiele plików z nazwami różniącymi się jedynie wielkością liter metoda canonicalize() dostosowuje ścieżkę, tak aby była zgodna z pierwszym znalezionym plikiem (w kolejności określonej przez system plików).

Metoda canonicalize() może również służyć do konwertowania krótkich nazw plików (nazwy „8.3”) na długie nazwy plików w systemie Windows, jak w poniższych przykładach:

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

Praca z pakietami i dowiązaniami symbolicznymi

Różne systemy operacyjne obsługują pliki pakietów oraz pliki dowiązań symbolicznych:

Pakiety W systemie Mac OS katalogi mogą być ustawiane jako pakiety i mogą być widoczne w narzędziu Finder systemu Mac OS jako pojedynczy plik, a nie katalog.

Dowiązania symboliczne W systemach Mac OS, Linux i Windows Vista dowiązania symboliczne są obsługiwane. Dowiązania symboliczne umożliwiają plikowi na wskazywanie innego pliku lub katalogu na dysku. Istnieją pewne podobieństwa, jednak dowiązania nie są aliasami. Alias jest zawsze zgłaszany jako plik (a nie katalog), a odczyt z aliasu i zapis do aliasu lub skrótu nigdy nie wpływa na oryginalny plik lub katalog, na który on wskazuje. Z drugiej strony dowiązanie symboliczne działa dokładnie, jak plik lub katalog, na który wskazuje. Może być zgłaszane jako plik lub katalog, a odczyt dowiązania lub zapis do dowiązania wpływa na plik lub katalog, na który wskazuje, a nie na dowiązanie symboliczne. Ponadto w systemach Windows właściwość isSymbolicLink obiektu File odwołująca się do punktu połączenia (używanego w systemie plików NTFS) jest ustawiona na wartość true .

Klasa File zawiera właściwości isPackage i isSymbolicLink umożliwiające sprawdzenie, czy obiekt File odwołuje się do pakietu lub dowiązania symbolicznego.

Poniższy kod przechodzi przez katalog na pulpicie, prezentując podkatalogi, które nie są pakietami:

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

Poniższy kod przechodzi przez katalog na pulpicie, prezentując pliki i podkatalogi, które nie dowiązaniami symbolicznymi:

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

Metoda canonicalize() zmienia ścieżkę dowiązania symbolicznego w taki sposób, aby wskazywała na plik lub katalog, do którego odwołuje się dowiązanie. Poniższy kod przechodzi przez katalog na pulpicie i zgłasza ścieżki, do których odwołują się pliki będące dowiązaniami symbolicznymi:

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

Określanie ilości miejsca dostępnego na woluminie

Właściwość spaceAvailable obiektu File to ilość miejsca dostępnego do wykorzystania w lokalizacji File, wyrażona w bajtach. Przykład: poniższy kod sprawdza ilość miejsca dostępnego w katalogu zapisu aplikacji:

trace(File.applicationStorageDirectory.spaceAvailable); 

Jeśli obiekt File odwołuje się do katalogu, wówczas właściwość spaceAvailable wskazuje ilość miejsca w katalogu, jaką mogą wykorzystać pliki. Jeśli obiekt File odwołuje się do pliku, wówczas właściwość spaceAvailable wskazuje maksymalną ilość miejsca, jaką może zajmować plik. Jeśli lokalizacja pliku nie istnieje, wówczas właściwość spaceAvailable ma wartość 0. Jeśli obiekt File odwołuje się do dowiązania symbolicznego, wówczas właściwość spaceAvailable jest ustawiona na ilość miejsca dostępnego w lokalizacji, na którą wskazuje dowiązanie symboliczne.

Zwykle ilość miejsca dostępnego dla katalogu lub pliku jest taka sama, jak ilość miejsca dostępnego w woluminie zawierającym katalog lub plik. Jednak ilość miejsca dostępnego może uwzględniać przydziały i limity dla poszczególnych katalogów.

Dodanie pliku lub katalogu do woluminu zwykle powoduje wykorzystanie większej ilości miejsca niż rzeczywisty rozmiar pliku lub rozmiar zawartości katalogu. Na przykład: system operacyjny może wymagać większej ilości miejsca w celu zapisu danych indeksu. Lub wymagane sektory dysku mogą wykorzystywać dodatkową ilość miejsca. Ponadto dostępna ilość miejsca zmienia się w sposób dynamiczny. Dlatego nie można oczekiwać, że możliwa będzie alokacja całej zgłaszanej ilości miejsca dla zapisu plików. Informacje na temat zapisywania danych w systemie plików zawiera sekcja Odczyt i zapis plików .

Metoda StorageVolumeInfo.getStorageVolumes() udostępnia bardziej szczegółowe informacje o podłączonych woluminach pamięci masowej (zobacz Praca z woluminami pamięci masowej ).

Otwieranie plików za pomocą domyślnej aplikacji systemowej

W środowisku AIR 2 istnieje możliwość otwarcia pliku przy użyciu aplikacji zarejestrowanej w systemie operacyjnym jako aplikacja przeznaczona do otwierania plików tego typu. Na przykład aplikacja AIR może otworzyć plik DOC za pomocą aplikacji zarejestrowanej jako przeznaczona do otwierania plików tego typu. W celu otwarcia pliku, należy użyć metody openWithDefaultApplication() obiektu File. Poniższy przykładowy kod otwiera plik o nazwie test.doc na pulpicie użytkownika za pomocą domyślnej aplikacji otwierającej pliki DOC:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Uwaga: W systemie Linux typ MIME pliku, a nie rozszerzenie nazwy pliku określa domyślną aplikację dla pliku.

Poniższy kod umożliwia użytkownikowi przejście do pliku MP3 i otwarcie go w domyślnej aplikacji służącej do odtwarzania plików MP3:

var file:File = File.documentsDirectory; 
var mp3Filter:FileFilter = new FileFilter("MP3 Files", "*.mp3"); 
file.browseForOpen("Open", [mp3Filter]); 
file.addEventListener(Event.SELECT, fileSelected); 
 
function fileSelected(e:Event):void 
{ 
    file.openWithDefaultApplication(); 
}

Metody openWithDefaultApplication() nie można używać do otwierania plików umieszczonych w katalogu aplikacji.

Środowisko AIR uniemożliwia używanie metody openWithDefaultApplication() do otwierania niektórych plików. W systemie Windows środowisko AIR uniemożliwia otwieranie plików należących do niektórych typów, takich jak EXE lub BAT. W systemie Mac OS i Linux środowisko AIR uniemożliwia otwieranie plików, które są uruchamiane w danej aplikacji. (To ograniczenie obejmuje programy Terminal i AppletLauncher w systemie Mac OS oraz csh, bash i ruby w systemie Linux). Próba otwarcia jednego z tych plików przy użyciu metody openWithDefaultApplication() spowoduje wygenerowanie wyjątku. Pełną listę typów plików, których nie można otwierać, zawiera opis metody File.openWithDefaultApplication() w skorowidzu języka.

Uwaga: To ograniczenie nie istnieje w przypadku aplikacji AIR zainstalowanej za pomocą instalatora macierzystego (aplikacji o rozszerzonym profilu komputerowym).