Arbeta med File-objekt i AIR

Adobe AIR 1.0 och senare

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:/images

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