Ett File-objekt är en pekare till en fil eller en katalog i filsystemet.
Klassen File utökar klassen FileReference. Klassen FileReference, som finns i både Adobe® Flash® Player och AIR, utgör en pekare till en fil, men klassen File lägger till egenskaper och metoder som av säkerhetsskäl inte visas i Flash Player (i en SWF-fil som körs i en webbläsare).
Om klassen File
Du kan använda klassen File för följande:
-
Hämta sökvägen till specialkataloger, bland annat användarkatalogen, användarens dokumentkatalog, katalogen som programmet startades från samt programkatalogen.
-
Kopiera filer och kataloger.
-
Flytta filer och kataloger.
-
Ta bort filer och kataloger (eller flytta dem till papperskorgen)
-
Visa filer och kataloger som finns i en katalog
-
Skapa tillfälliga filer och mappar
När ett File-objekt pekar på en filsökväg, kan du använda den om du vill läsa och skriva fildata, med hjälp av klassen FileStream.
Ett File-objekt kan peka på sökvägen till en fil eller katalog som inte längre finns. Du kan använda sådana File-filobjekt när du skapar en fil eller katalog.
Sökvägar till File-objekt
Varje File-objekt har två egenskaper som definierar sökvägen:
Egenskap
|
Beskrivning
|
nativePath
|
Anger den plattformsspecifika sökvägen till en fil. I Windows kan en sökväg vara ”c:\Sample directory\test.txt” medan den i Mac OS är ”/Sample directory/test.txt”.
nativePath
-egenskapen använder ett omvänt snedstreck (\) som katalogavgränsare i Windows, och ett vanligt snedstreck (/) i Mac OS och Linux.
|
url
|
Denna kan använda filens URL-schema för att peka mot en fil. I Windows kan en sökväg vara ”file:///c:/Sample%20directory/test.txt” medan den i Mac OS är ”file:///Sample%20directory/test.txt”. Körningsversionen omfattar andra särskilda URL-scheman förutom
file
och dessa beskrivs i
URL-scheman som stöds i AIR
|
Klassen File inkluderar statiska egenskaper som du använder för att peka på standardkataloger i Mac OS, Windows och Linux. Bland dessa egenskaper finns:
-
File.applicationStorageDirectory
– en katalog som är unik för varje installerat AIR-program. Den här katalogen är ett bra ställe att lagra dynamiska programresurser och användarinställningar. Stora datamängder bör lagras någon annanstans.
På Android och iOS tas programkatalogen bort när programmet avinstalleras eller när användaren väljer att rensa programdata, men detta gäller inte andra plattformar.
-
File.applicationDirectory
– den katalog där programmet installeras (tillsammans med eventuella resurser). På vissa operativsystem lagras programmet i en enda paketfil, i stället för i en fysisk katalog. I så fall kan det hända att innehållet inte är tillgängligt via systemsökvägen. Programkatalogen är skrivskyddad.
-
File.desktopDirectory
– användarens skrivbordskatalog. Om plattformen inte definierar någon skrivbordskatalog används en annan plats i filsystemet.
-
File.documentsDirectory
– användarens dokumentkatalog. Om plattformen inte definierar någon dokumentkatalog används en annan plats i filsystemet.
-
File.userDirectory
– användarkatalogen. Om plattformen inte definierar någon användarkatalog används en annan plats i filsystemet.
Obs!
Om plattformen inte definierar några standardplatser för skrivbords-, dokument- eller användarkataloger kan
File.documentsDirectory
,
File.desktopDirectory
och
File.userDirectory
referera till samma katalog.
Dessa egenskaper har olika värden på olika operativsystem. Mac och Windows har till exempel olika systemsökvägar till användarens skrivbordskatalog. Egenskapen
File.desktopDirectory
pekar däremot på en lämplig katalogsökväg på alla plattformar. Om du vill skriva program som fungerar bra på olika plattformar använder du de här egenskaperna som utgångspunkt för att referera till andra kataloger och filer som används av programmet. Sedan använder du metoden
resolvePath()
för att närmare specificera sökvägen. Den här koden pekar till exempel på filen preferences.xml i programmets katalog:
var prefsFile:File = File.applicationStorageDirectory;
prefsFile = prefsFile.resolvePath("preferences.xml");
Även om du kan använda klassen File för att peka på en viss sökväg kan det leda till att programmet inte fungerar på alla plattformar. Sökvägen C:\Documents and Settings\joe\ fungerar till exempel bara på Windows. Därför är det bäst att använda de statiska egenskaperna i klassen File, som
File.documentsDirectory
.
Vanliga katalogplatser
Plattform
|
Katalogtyp
|
Normal filsystemplats
|
Android
|
Program
|
/data/data/
|
Programlagring
|
/data/data/air.applicationID/filename/Local Store
|
Cache
|
/data/data/applicationID/cache
|
Skrivbord
|
/mnt/sdcard
|
Dokument
|
/mnt/sdcard
|
Tillfällig
|
/data/data/applicationID/cache/FlashTmp.randomString
|
Användare
|
/mnt/sdcard
|
iOS
|
Program
|
/var/mobile/Applications/uid/filename.app
|
Programlagring
|
/var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store
|
Cache
|
/var/mobile/Applications/uid/Library/Caches
|
Skrivbord
|
ej tillgängligt
|
Dokument
|
/var/mobile/Applications/uid/Documents
|
Tillfällig
|
/private/var/mobile/Applications/uid/tmp/FlashTmpNNN
|
Användare
|
ej tillgängligt
|
Linux
|
Program
|
/opt/filename/share
|
Programlagring
|
/home/userName/.appdata/applicationID/Local Store
|
Skrivbord
|
/home/userName/Desktop
|
Dokument
|
/home/userName/Documents
|
Tillfällig
|
/tmp/FlashTmp.randomString
|
Användare
|
/home/userName
|
Macintosh
|
Program
|
/Applications/filename.app/Contents/Resources
|
Programlagring
|
/Users/
userName
/Library/Preferences/
applicationid
/Local Store
(AIR 3.2 och tidigare)
path
/Library/Application Support/
applicationid
/Local Store
(AIR 3.3 och senare), där sökvägen är antingen
/Users/
userName
/Library/Containers/
bundle-id
/Data
(sandlådemiljö) eller
/Users/userName
(vid körning utanför sandlådemiljö)
|
Cache
|
/Users/userName/Library/Caches
|
Skrivbord
|
/Users/
userName
/Desktop
|
Dokument
|
/Users/
userName
/Documents
|
Tillfällig
|
/private/var/folders/JY/randomString/TemporaryItems/FlashTmp
|
Användare
|
/Users/
userName
|
Windows
|
Program
|
C:\Program Files\filename
|
Programlagring
|
C:\Documents and settings\userName\ApplicationData\applicationID\Local Store
|
Cache
|
C:\Documents and settings\userName\Local Settings\Temp
|
Skrivbord
|
C:\Documents and settings\userName\Desktop
|
Dokument
|
C:\Documents and settings\userName\My Documents
|
Tillfällig
|
C:\Documents and settings\userName\Local Settings\Temp\randomString.tmp
|
Användare
|
C:\Documents and settings\userName
|
De faktiska systemsökvägarna för dessa kataloger varierar beroende på operativsystem och datorkonfiguration. Sökvägarna i den här tabellen är exempel. Du bör alltid använda lämpliga statiska egenskaper för klassen File för att referera till de här katalogerna så att programmet fungerar som det ska oavsett plattform. I ett riktigt AIR-program hämtas värdena för
applicationID
och
filename
(som visas i tabellen) från programbeskrivningsfilen. Om du anger ett utgivar-ID i programbeskrivningsfilen läggs utgivar-ID:t till program-ID:t i dessa sökvägar. Värdet på
userName
är kontonamnet för den användare som installerar programmet.
Peka ett File-objekt mot en katalog
Du kan ställa in ett File-objekt på två sätt så att det pekar mot en katalog.
Peka mot användarens hemkatalog
Du kan peka ett File-objekt mot användarens hemkatalog. Följande kod ställer in ett File-objekt att peka mot en AIR Test-underkatalog till hemkatalogen:
var file:File = File.userDirectory.resolvePath("AIR Test");
Peka mot användarens dokumentkatalog
Du kan peka ett File-objekt mot användarens dokumentkatalog. Följande kod ställer in ett File-objekt att peka mot en AIR Test-underkatalog till dokumentkatalogen:
var file:File = File.documentsDirectory.resolvePath("AIR Test");
Peka mot skrivbordskatalogen
Du kan peka ett File-objekt mot skrivbordet. Följande kod ställer in ett File-objekt att peka mot en AIR Test-underkatalog till skrivbordet:
var file:File = File.desktopDirectory.resolvePath("AIR Test");
Peka mot programlagringskatalogen
Du kan peka ett File-objekt mot programlagringskatalogen. För alla AIR-program finns det en unik associerad sökväg som definierar programlagringskatalogen. Den här katalogen är unik för varje program och användare. Du kan använda den här katalogen för att lagra användarspecifika, programspecifika data (till exempel användardata eller inställningsfiler). Följande kod pekar ett File-objekt mot en inställningsfil, prefs.xml, som finns i programlagringskatalogen:
var file:File = File.applicationStorageDirectory;
file = file.resolvePath("prefs.xml");
Sökvägen för programlagringskatalogen baseras vanligtvis på användarnamnet och program-ID:t. Följande filsystemplatser visas här för att underlätta felsökning av programmet. Du bör alltid använda egenskapen
File.applicationStorage
eller URI-schemat
app-storage:
för att lösa filkonflikter i den här katalogen:
-
På Mac OS – varierar beroende på AIR-version:
AIR 3.2 och tidigare
:
/Users/användarnamn/Library/Preferences/
applicationID
/Local Store/
AIR 3.3 och senare
:
path
/Library/Application Support/
applicationID
/Local Store
, där
path
antingen är
/Users/
username
/Library/Containers/
bundle-id
/Data
(sandlådemiljö) eller
/Users/
username
(vid körning utanför sandlådemiljö)
Exempel (AIR 3.2):
/Users/babbage/Library/Preferences/com.example.TestApp/Local Store
-
I Windows (i katalogen Documents and Settings):
C:\Documents and Settings\användarnamn
\Application Data\
program-ID
\Local Store\
Till exempel:
C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
-
I Linux – i:
/home/
användarnamn
/.appdata/
program-ID
/Local Store/
Till exempel:
/home/babbage/.appdata/com.example.TestApp/Local Store
-
I Android:
/data/data/
androidPackageID
/
applicationID/Local Store
Till exempel:
/data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Obs!
Om ett program har ett utgivar-ID används även detta utgivar-ID som en del av sökvägen till programlagringskatalogen.
URL:en (och egenskapen
url
) för ett File-objekt som har skapats med
File.applicationStorageDirectory
använder URL-schemat
app-storage
(se
URL-scheman som stöds i AIR
), så här:
var dir:File = File.applicationStorageDirectory;
dir = dir.resolvePath("preferences");
trace(dir.url); // app-storage:/preferences
Peka mot programkatalogen
Du kan peka ett File-objekt mot katalogen där programmet installerades, som också kallas för programkatalogen. Du kan referera till den här katalogen med hjälp av egenskapen
File.applicationDirectory
. Du kan använda den här katalogen för att undersöka programbeskrivningsfilen eller andra resurser som har installerats med programmet. Följande kod pekar ett File-objekt mot en katalog med namnet
images
i programkatalogen:
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("images");
URL:en (och egenskapen
url
) för ett File-objekt som har skapats med
File.applicationDirectory
använder URL-schemat
app
(se
URL-scheman som stöds i AIR
), så här:
var dir:File = File.applicationDirectory;
dir = dir.resolvePath("images");
trace(dir.url); // app:/images
Obs!
I Android är filerna i programpaketet inte tillgängliga via
nativePath
. Egenskapen
nativePath
är en tom sträng. Använd alltid URL:en för att komma åt filer i programkatalogen i stället för en systemsökväg.
Peka mot cachekatalogen
Du kan peka ett File-objekt mot operativsystemets tillfälliga katalog eller cachekatalog med egenskapen
File.cacheDirectory
. Den här katalogen innehåller tillfälliga filer som inte behövs för att programmet ska kunna köras, och användaren råkar inte ut för problem eller dataförlust om de tas bort.
På de flesta operativsystem är cachekatalogen en tillfällig katalog. På iOS motsvarar cachekatalogen programbibliotekets katalog Caches. Filer i den här katalogen säkerhetskopieras inte till onlinelagringsutrymmet och kan tas bort av operativsystemet om enhetens tillgängliga lagringsutrymme är för litet. Du hittar mer information i
Hantera säkerhetskopiering och cachning av filer
.
Peka på filsystemets rot
Metoden
File.getRootDirectories()
visar alla rotvolymer, till exempel C: och monterade volymer på en Windows-dator. I Mac OS och Linux returnerar den här metoden alltid datorns unika rotkatalog (katalogen "/"). Metoden
StorageVolumeInfo.getStorageVolumes()
ger mer detaljerad information om monterade lagringsvolymer (se
Arbeta med lagringsvolymer
).
Obs!
Filsystemets rot kan inte läsas i Android. Ett File-objekt som refererar till katalogen med systemsökvägen ”/” returneras, men egenskaperna för det objektet har inte korrekta värden.
spaceAvailable
är till exempel alltid 0.
Peka mot en viss katalog
Du kan peka File-objektet mot en viss katalog genom att ange egenskapen
nativePath
för File-objektet, som i följande exempel (i Windows):
var file:File = new File();
file.nativePath = "C:\\AIR Test";
Viktigt!
Om du pekar på en explicit sökväg på det här sättet kan det innebära att koden inte fungerar på alla plattformar. Det föregående exemplet fungerar till exempel bara på Windows. Du kan använda de statiska egenskaperna i File-objektet, som
File.applicationStorageDirectory
, för att leta upp en katalog som fungerar på alla plattformar. Använd sedan metoden
resolvePath()
(se nästa avsnitt) för att navigera till en relativ sökväg.
Navigera till relativa sökvägar
Med metoden
resolvePath()
kan du hämta en sökväg som är relativ till en annan angiven sökväg. Följande kod ställer in ett File-objekt att peka mot underkatalogen ”AIR Test” till användarens hemkatalog:
var file:File = File.userDirectory;
file = file.resolvePath("AIR Test");
Du kan också använda egenskapen
url
för ett File-objekt om du vill peka det mot en katalog utifrån en URL-sträng, så här:
var urlStr:String = "file:///C:/AIR Test/";
var file:File = new File()
file.url = urlStr;
Mer information finns i
Ändra File-sökvägar
.
Låta användarna bläddra för att välja en katalog
Klassen File omfattar metoden
browseForDirectory()
, som visar en systemdialogruta där användaren kan välja en katalog och tilldela den till objektet. Metoden
browseForDirectory()
är asynkron. File-objektet skickar en
select
-händelse om användaren väljer en katalog och klickar på knappen Öppna och skickar en
cancel
-händelse om användaren klickar på knappen Avbryt.
Följande kod gör så att användaren kan välja en katalog och returnerar katalogsökvägen när katalogen väljs:
var file:File = new File();
file.addEventListener(Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(e:Event):void {
trace(file.nativePath);
}
Obs!
I Android stöds metoden
browseForDirectory()
inte. Om du anropar den här metoden har det ingen effekt alls, utan då skickas en cancel-händelse direkt. Om du vill att användaren ska kunna välja en katalog använder du en anpassad, programdefinierad dialogruta i stället.
Peka mot den katalog som programmet anropas från
Du kan hämta den katalogplats som programmet anropas från genom att kontrollera egenskapen
currentDirectory
för InvokeEvent-objektet som skickas när programmet anropas. Mer information finns i
Hämta kommandoradsargument
.
Peka ett File-objekt mot en fil
Du kan ställa in filen som ett File-objekt pekar mot på olika sätt.
Peka mot en explicit filsökväg
Viktigt!
Om du pekar på en explicit sökväg kan det innebära att koden inte fungerar på alla plattformar. Sökvägen C:/foo.txt fungerar till exempel bara på Windows. Du kan använda de statiska egenskaperna i File-objektet, som
File.applicationStorageDirectory
, för att leta upp en katalog som fungerar på alla plattformar. Använd sedan metoden
resolvePath()
(se
Ändra File-sökvägar
) för att navigera till en relativ sökväg.
Du kan använda egenskapen
url
för ett File-objekt om du vill peka det mot en fil eller katalog utifrån en URL-sträng, så här:
var urlStr:String = "file:///C:/AIR Test/test.txt";
var file:File = new File()
file.url = urlStr;
Du kan också skicka URL:en till konstruktorfunktionen
File()
, så här:
var urlStr:String = "file:///C:/AIR Test/test.txt";
var file:File = new File(urlStr);
Egenskapen
url
returnerar alltid den URI-kodade versionen för URL:en (blanksteg ersätts till exempel med
"%20
):
file.url = "file:///c:/AIR Test";
trace(file.url); // file:///c:/AIR%20Test
Du kan också använda egenskapen
nativePath
för ett File-objekt om du vill ställa in en explicit sökväg. När följande kod körs på en Windows-dator ställs ett File-objekt in på att testa filen test.txt i AIR-underkatalogen Test på enhet C:
var file:File = new File();
file.nativePath = "C:/AIR Test/test.txt";
Du kan också skicka den här sökvägen till konstruktorfunktionen
File()
, så här:
var file:File = new File("C:/AIR Test/test.txt");
Använd snedstreck (/) som sökvägsavgränsare för egenskapen
nativePath
. På Windows kan du även använda omvänt snedstreck (\), men då kommer programmet inte att fungera på alla plattformar.
Mer information finns i
Ändra File-sökvägar
.
Gå igenom filer i en katalog
Med metoden
getDirectoryListing()
för ett File-objekt kan du hämta en array med File-objekt som pekar mot filer och underkataloger på en katalogs rotnivå. Mer information finns i
Gå igenom kataloger
.
Låta användarna bläddra för att välja en fil
Klassen File omfattar metoder som visar en systemdialogruta där användaren kan välja en fil och tilldela den till objektet:
-
browseForOpen()
-
browseForSave()
-
browseForOpenMultiple()
Dessa metoder är asynkrona. Metoden
browseForOpen()
och
browseForSave()
skickar den valda händelsen när användaren väljer en fil (eller en målsökväg när det gäller browseForSave()). Med metoderna
browseForOpen()
och
browseForSave()
pekar mål-File-objektet mot de valda filerna. Metoden
browseForOpenMultiple
() skickar en
selectMultiple
-händelse när användaren väljer filer. Händelsen
selectMultiple
är av typen FileListEvent, som har en
files
-egenskap som är en array med File-objekt (som pekar mot de valda filerna).
Följande kod visar dialogrutan ”Öppna” för användaren där användaren kan välja en fil:
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);
}
Om programmet har en annan webbläsardialogruta öppen när du anropar en bläddringsmetod, returneras ett Error-undantag.
Obs!
I Android kan bara bild-, video- och ljudfiler väljas med metoderna
browseForOpen()
och
browseForOpenMultiple()
. Dialogrutan browseForSave() visar dessutom bara mediefiler, även om användaren kan ange ett godtyckligt filnamn. Om icke-mediefiler ska kunna öppnas och sparas bör du använda anpassade dialogrutor i stället för de här metoderna.
Ändra File-sökvägar
Du kan också ändra sökvägen för ett befintligt File-objekt genom att anropa metoden
resolvePath()
eller ändra egenskapen
nativePath
eller
url
för objektet, som i följande exempel (i 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
När du använder egenskapen
nativePath
använder du snedstrecket (/) som katalogavgränsare. På Windows kan du även använda omvänt snedstreck (\), men du bör inte göra det eftersom det kan innebära att koden inte fungerar på alla plattformar.
URL-scheman som stöds i AIR
I AIR kan du använda följande URL-scheman när du definierar egenskapen
url
för ett File-objekt:
URL-schema
|
Beskrivning
|
file
|
Använd detta när du anger en sökväg som är relativ till filsystemets rot. Till exempel:
file:///c:/AIR Test/test.txt
URL-standarden anger att en fil-URL har formatet
file://<värd>/<sökväg>
. I vissa fall kan
<värd>
vara en tom sträng, som tolkas som ”datorn som URL:en tolkas från”. Därför innehåller fil-URL:er ofta tre snedstreck (///).
|
app
|
Använd detta när du anger en sökväg som är relativ till rotkatalogen för det installerade programmet (katalogen som innehåller filen application.xml för det installerade programmet). Följande sökväg pekar mot en bildunderkatalog till katalogen med det installerade programmet:
|
app-storage
|
Använd detta när du anger en sökväg som är relativ till programmets lagerkatalog. För varje installerat program definieras en unik programlagringskatalog i AIR, där du kan lagra data för just det programmet. Följande sökväg pekar till exempel på en prefs.xml-fil i en inställningsunderkatalog till programlagringskatalogen:
app-storage:/settings/prefs.xml
|
Hantera säkerhetskopiering och cachning av filer
På vissa operativsystem, särskilt iOS och Mac OS X, har användaren möjlighet att automatiskt säkerhetskopiera programfiler till ett fjärrlagringsutrymme. På iOS finns det även begränsningar som rör huruvida filerna kan säkerhetskopieras och var filer med olika användningsområde kan sparas.
Nedan sammanfattas Apples riktlinjer för säkerhetskopiering och lagring av filer. Ytterligare information finns i efterföljande avsnitt.
-
Om du vill ange att en fil inte behöver säkerhetskopieras, och (endast iOS) kan tas bort av operativsystemet om enhetens lagringsutrymme är för litet, sparar du filen i cachekatalogen (
File.cacheDirectory
). Detta är den rekommenderade lagringsplatsen på iOS och den bör användas för de flesta filer som kan återskapas eller hämtas igen.
-
Om du vill ange att en fil inte behöver säkerhetskopieras, men inte heller ska tas bort av operativsystemet, sparar du filen i en av programkatalogerna, som programlagringskatalogen (
File.applicationStorageDirectory
) eller dokumentkatalogen (
File.documentsDirectory
). Ange File-objektets
preventBackup
-egenskap som
true
. Apple kräver detta för innehåll som kan återskapas eller hämtas igen, men som behövs för att ditt program ska fungera korrekt vid offlineanvändning.
Ange filer för säkerhetskopiering
För att spara på utrymmet som krävs för säkerhetskopior och minska belastningen på nätverket anger Apples riktlinjer för iOS- och Mac-program att endast filer som innehåller användarangivna data, eller data som inte kan återskapas eller hämtas igen, bör säkerhetskopieras.
Som standard säkerhetskopieras alla filer i programbiblioteksmapparna. På Mac OS X är detta programlagringskatalogen. På iOS inkluderar detta programlagringskatalogen, programkatalogen, skrivbordskatalogen, dokumentkatalogen och användarkatalogen (eftersom dessa kataloger är mappade till programbiblioteksmappar på iOS). Följaktligen säkerhetskopieras alla filer i dessa kataloger som standard till servern.
Om du sparar en fil som kan återskapas av programmet på någon av de här platserna bör du flagga filen så att operativsystemet inte säkerhetskopierar den. Du anger att en fil inte ska säkerhetskopieras genom att ange File-objektets
preventBackup
-egenskap som
true
.
Tänk på följande för iOS: En fil som finns i någon av programbiblioteksmapparna flaggas som en beständig fil som inte ska tas bort av operativsystemet, även om filens
preventBackup
-egenskap är
true
.
Hantera cachning och borttagning av filer
Apples riktlinjer för iOS-program anger att innehåll som kan återskapas i största möjliga mån bör kunna tas bort av operativsystemet, om enheten skulle få ont om lagringsutrymme.
På iOS flaggas filer i programbiblioteksmapparna (som programlagringskatalogen och dokumentkatalogen) som beständiga (permanenta) och tas inte bort av operativsystemet.
Spara filer, som kan återskapas av programmet och som kan tas bort utan problem vid utrymmesbrist, i programmets cachekatalog. Du kommer åt cachekatalogen med den statiska egenskapen
File.cacheDirectory
.
På iOS motsvarar cachekatalogen programmets cachekatalog (<Application Home>/Library/Caches). På andra operativsystem mappas den här katalogen till en likvärdig katalog. På Mac OS X mappas den till exempel även till katalogen Caches i programbiblioteket. På Android mappas cachekatalogen till programmets cachekatalog. På Windows mappas cachekatalogen till operativsystemets temp-katalog. På både Android och Windows är detta samma katalog som nås via ett anrop till File-klassens
createTempDirectory()
- och
createTempFile()
-metoder.
Hitta den relativa sökvägen mellan två filer
Med metoden
getRelativePath()
kan du söka efter den relativa sökvägen mellan två filer:
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
Den andra parametern för metoden
getRelativePath()
, parametern
useDotDot
, gör att syntaxen
..
kan returneras i resultat, vilket anger överordnade kataloger:
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
Skaffa kanoniska versioner av filnamn
Fil- och sökvägsnamn är inte skiftlägeskänsliga i Windows och Mac OS. Nedan pekar två File-objekt mot samma fil:
File.documentsDirectory.resolvePath("test.txt");
File.documentsDirectory.resolvePath("TeSt.TxT");
Dokument- och katalognamnen har emellertid samma skiftläge. Nedan förutsätts det att det finns en mapp med namnet AIR Test i dokumentkatalogen:
var file:File = File.documentsDirectory.resolvePath("AIR test");
trace(file.nativePath); // ... AIR test
file.canonicalize();
trace(file.nativePath); // ... AIR Test
Metoden
canonicalize()
konverterar
nativePath
-objektet så att rätt skiftläge används för fil- eller katalognamnet. Om användningen av gemener och versaler är det enda som skiljer olika filer åt i ett system som är skiftlägeskänsligt (t.ex. Linux) justerar
canonicalize()
-metoden sökvägen så att den matchar den första fil som hittas (i den ordning som fastställs av filsystemet).
Du kan också använda metoden
canonicalize()
om du vill konvertera korta filnamn (”8.3”-namn) till långa filnamn i Windows, som i följande exempel:
var path:File = new File();
path.nativePath = "C:\\AIR~1";
path.canonicalize();
trace(path.nativePath); // C:\AIR Test
Arbeta med paket och symboliska länkar
Olika operativsystem stöder paketfiler och filer med symboliska länkar:
Paket
– I Mac OS kan kataloger definieras som paket och visas som en fil i Finder i Mac OS i stället för som en katalog.
Symboliska länkar
– Symboliska länkar stöds i Mac OS, Linux och Windows Vista. Med hjälp av symboliska länkar kan en fil peka på en annan fil eller katalog på disken. Även om de påminner om varandra är symboliska länkar och alias inte samma sak. Ett alias rapporteras alltid som en fil (i stället för som en katalog), och om du läser eller skriver till aliaset eller genvägen påverkar detta inte den ursprungliga fil eller katalog som dessa pekar på. En symbolisk länk fungerar däremot precis som den fil eller katalog den pekar på. Den kan rapporteras som en fil eller katalog, och om du läser eller skriver till en symbolisk länk påverkar detta den fil eller katalog som länken pekar på, inte den symboliska länken. I Windows är dessutom egenskapen
isSymbolicLink
för ett File-objekt som refererar till en knutpunkt (används i NTFS-filsystemet) angiven som
true
.
Klassen File omfattar egenskaperna
isPackage
och
isSymbolicLink
som kontrollerar om ett File-objekt refererar till ett paket eller en symbolisk länk.
Följande kod itererar genom användarens skrivbordskatalog, och visar underkataloger som
inte
är paket:
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);
}
}
Följande kod itererar genom användarens skrivbordskatalog, och visar filer och kataloger som
inte
är symboliska länkar:
var desktopNodes:Array = File.desktopDirectory.getDirectoryListing();
for (var i:uint = 0; i < desktopNodes.length; i++)
{
if (!desktopNodes[i].isSymbolicLink)
{
trace(desktopNodes[i].name);
}
}
Metoden
canonicalize()
ändrar sökvägen för en symbolisk länk till att peka mot filen eller katalogen som länken refererar till. Följande kod itererar genom användarens skrivbordskatalog, och rapporterar sökvägarna som refereras av filer som är symboliska länkar:
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);
}
}
Ta reda på ledigt utrymme på en volym
Egenskapen
spaceAvailable
för ett File-objekt anger det lediga utrymmet vid File-platsen, i byte. Följande kod kontrollerar det lediga utrymmet i programlagringskatalogen:
trace(File.applicationStorageDirectory.spaceAvailable);
Om filobjektet refererar till en katalog, visar egenskapen
spaceAvailable
utrymmet i den katalog som filen kan använda. Om filobjektet refererar till en fil, visar egenskapen
spaceAvailable
utrymmet som filen kan växa till. Om filplatsen inte finns, är egenskapen
spaceAvailable
inställd på 0. Om filobjektet refererar till en symbolisk länk, ställs egenskapen
spaceAvailable
in på det lediga utrymme som den symboliska länken pekar ut.
Vanligtvis är det tillgängliga utrymmet för en katalog eller fil samma som det tillgängliga utrymmet i volymen som innehåller katalogen eller filen. Kvoter och kataloggränser räknas dock med i tillgängligt utrymme.
Att lägga till en fil eller en katalog i en volym kräver generellt mer utrymme än den befintliga storleken på filen eller på innehållet i katalogen. Operativsystemet kan till exempel kräva mer utrymme för att lagra indexinformation. Eller också kan disksektorerna kräva mer utrymme. Tillgängligt utrymme ändras dynamiskt. Du kan alltså inte förvänta dig att tilldelas hela det rapporterade utrymmet för fillagring. Information om hur du skriver till filsystemet finns i
Läsa och skriva filer
.
Metoden
StorageVolumeInfo.getStorageVolumes()
ger mer detaljerad information om monterade lagringsvolymer (se
Arbeta med lagringsvolymer
).
Öppna filer med standardsystemprogrammet
I AIR 2 kan du öppna en fil med hjälp av det program som registrerats i operativsystemet för att öppna filen. Ett AIR-program kan till exempel öppna en DOC-fil med det program som registrerats för att öppna den. Använd metoden
openWithDefaultApplication()
för ett File-objekt för att öppna filen. Med följande kod öppnas till exempel en fil med namnet test.doc på användarens skrivbord med hjälp av standardprogrammet för DOC-filer:
var file:File = File.deskopDirectory;
file = file.resolvePath("test.doc");
file.openWithDefaultApplication();
Obs!
I Linux avgörs standardprogrammet för en fil av filens MIME-typ, inte genom filtillägget.
Med följande kod kan användaren navigera till en mp3-fil och öppna den i standardprogrammet för att spela upp mp3-filer:
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();
}
Du kan inte använda metoden
openWithDefaultApplication()
med filer som finns i programkatalogen.
Med AIR förhindras du att använda metoden
openWithDefaultApplication()
för att öppna vissa filer. I Windows förhindras du av AIR att öppna filer med vissa filtyper, till exempel EXE eller BAT. I Mac OS och Linux förhindrar AIR att du öppnar filer i vissa program. (Det gäller bland annat terminalen och AppletLauncher i Mac OS och csh, bash eller ruby i Linux.) Om du försöker öppna någon av dessa filer med metoden
openWithDefaultApplication()
resulterar det i ett undantag. En komplett lista över förhindrade filtyper finns under språkreferensposten för metoden
File.openWithDefaultApplication()
.
Obs!
Den här begränsningen finns inte i AIR-program som installerats med ett systemspecifikt installationsprogram (ett utökat skrivbordsprogram).
|
|
|