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