Werken met File-objecten in AIR

Adobe AIR 1.0 of hoger

Een File-object is een aanwijzer naar een bestand of map in het bestandssysteem.

De klasse File is een uitbreiding van de klasse FileReference. De klasse FileReference, die beschikbaar is in Adobe® Flash® Player en AIR, vertegenwoordigt een aanwijzer voor een bestand. De klasse File voegt eigenschappen en methoden toe die uit veiligheidsoverwegingen niet worden blootgesteld in Flash Player (in een SWF-bestand dat wordt uitgevoerd in een browser).

Informatie over de klasse File

U kunt de klasse File voor het volgende gebruiken:

  • het ophalen van het pad naar speciale mappen, inclusief de gebruikersmap, de documentenmap van de gebruiker, de map van waaruit de toepassing is gestart en de toepassingsmap;

  • het kopiëren van bestanden en mappen;

  • het verplaatsen van bestanden en mappen;

  • het verwijderen van bestanden en mappen (of het verplaatsen ervan naar de prullenbak);

  • het weergeven van lijsten van bestanden en mappen die zich bevinden in een map;

  • het maken van tijdelijke bestanden en mappen.

Als een File-object eenmaal een bestandsmap aanwijst, kunt u dat object gebruiken om bestandsgegevens te lezen en te schrijven met behulp van de klasse FileStream.

Een File-object kan het pad aanwijzen van een bestand dat of een map die nog niet bestaat. U kunt zo'n File-object gebruiken bij het maken van een bestand of map.

Paden van File-objecten

Ieder File-object heeft twee eigenschappen die het pad ervan definiëren:

Eigenschap

Beschrijving

nativePath

Geeft het platformspecifieke pad naar een bestand op. In Windows kan een pad bijvoorbeeld "C:\Voorbeeldmap\test.txt" zijn, terwijl in Mac OS het pad "/Voorbeeldmap/test.txt" is. De eigenschap nativePath gebruikt de backslash (\) als scheidingsteken voor mappen in Windows, en de schuine streep (/) in Mac OS en Linux.

url

Het URL-schema file kan dit gebruiken om een bestand aan te wijzen. In Windows kan een pad bijvoorbeeld "file:///C:/Voorbeeldmap/test.txt" zijn, terwijl in Mac OS het pad "file:///Voorbeeldmap/test.txt" is. De runtime bevat nog andere speciale URL-schema’s behalve file ; deze worden beschreven in Ondersteunde URL-protocollen voor AIR

De File-klasse bevat statische eigenschappen voor het aanwijzen van standaardmappen op Mac OS, Windows en Linux. Deze eigenschappen bevatten:

  • File.applicationStorageDirectory —een opslagmap die uniek is voor elke geïnstalleerde AIR-toepassing.. Deze map is geschikt voor het opslaan van dynamische toepassingselementen en gebruikersvoorkeuren. U kunt grote hoeveelheden gegevens beter ergens anders opslaan.

    Op Android en iOS wordt de toepassingsopslagmap verwijderd wanneer de toepassing wordt verwijderd of wanneer de gebruiker besluit toepassingsgegevens te wissen. Op andere platformen is dit niet het geval.

  • File.applicationDirectory —de map waarin de toepassing is geïnstalleerd (samen met geïnstalleerde onderdelen). Op sommige besturingssystemen wordt de toepassing opgeslagen in één pakketbestand in plaats van in een fysieke map. In dat geval is de inhoud wellicht niet bereikbaar via het geïntegreerde pad. De toepassingsmap heeft het kenmerk Alleen-lezen.

  • File.desktopDirectory —de bureaubladmap van de gebruiker. Als een platform geen bureaubladmap definieert, wordt een andere locatie in het bestandssysteem gebruikt.

  • File.documentsDirectory —de documentmap van de gebruiker. Als een platform geen documentmap definieert, wordt een andere locatie in het bestandssysteem gebruikt.

  • File.userDirectory —de gebruikersmap. Als een platform geen gebruikersmap definieert, wordt een andere locatie in het bestandssysteem gebruikt.

Opmerking: Wanneer een platform geen standaardlocatie definieert voor bureaublad-, document- of gebruikersmappen, kunnen File.documentsDirectory , File.desktopDirectory , en File.userDirectory naar dezelfde map verwijzen.

Deze eigenschappen hebben verschillende waarden in verschillende besturingssystemen. Mac en Windows hebben bijvoorbeeld elk een ander geïntegreerd pad naar de bureaubladmap van de gebruiker. De eigenschap File.desktopDirectory verwijst echter naar een geschikt mappad op elk platform. Om toepassingen te schrijven die goed op alle platformen werken, gebruikt u deze eigenschappen als de basis voor verwijzen naar andere mappen en bestanden die door de toepassing worden gebruikt. Gebruik de resolvePath() -methode om het pad te verfijnen. Deze code wijst bijvoorbeeld naar het bestand preferences.xml in de opslagmap van de toepassing:

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

Hoewel u met de File-klasse naar een bepaald bestandspad kunt wijzen, kan dit leiden naar toepassingen die niet op alle platformen werken. Het pad C:\Documents and Settings\joe\ werkt bijvoorbeeld alleen op Windows. Om die reden is het beter om de statische eigenschappen van de File-klasse te gebruiken, zoals File.documentsDirectory .

Gebruikelijke maplocaties

Platform

Type map

Standaardlocatie voor bestandssysteem

Android

Toepassing

/data/data/

Opslag van toepassingen

/data/data/air.applicationID/filename/Local Store

Cache

/data/data/applicationID/cache

Desktop

/mnt/sdcard

Documenten

/mnt/sdcard

Tijdelijke opslag

/data/data/applicationID/cache/FlashTmp.randomString

Gebruiker

/mnt/sdcard

iOS

Toepassing

/var/mobile/Applications/uid/filename.app

Opslag van toepassingen

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

Cache

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

Desktop

niet toegankelijk

Documenten

/var/mobile/Applications/uid/Documents

Tijdelijke opslag

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

Gebruiker

niet toegankelijk

Linux

Toepassing

/opt/bestandsnaam/share

Opslag van toepassingen

/home/userName/.appdata/applicationID/Local Store

Desktop

/home/userName/Desktop

Documenten

/home/userName/Documents

Tijdelijke opslag

/tmp/FlashTmp.randomString

Gebruiker

/home/userName

Mac

Toepassing

/Applications/filename.app/Contents/Resources

Opslag van toepassingen

/Users/ gebruikersnaam /Library/Preferences/ toepassings-id /Local Store (AIR 3.2 en lager)

pad /Library/Application Support/ toepassings-id /Local Store (AIR 3.3 en hoger), waarbij het pad ofwel /Users/ gebruikersnaam /Library/Containers/ bundle-id /Data is (in een sandbox-omgeving), of /Users/gebruikersnaam (buiten een sandbox-omgeving)

Cache

/Users/userName/Library/Caches

Desktop

/Users/ gebruikersnaam /Desktop

Documenten

/Users/ gebruikersnaam /Documents

Tijdelijke opslag

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

Gebruiker

/Users/ gebruikersnaam

Windows

Toepassing

C:\Program Files\filename

Opslag van toepassingen

C:\Documents and settings\userName\ApplicationData\applicationID\Local Store

Cache

C:\Documents and settings\userName\Local Settings\Temp

Desktop

C:\Documents and settings\userName\Desktop

Documenten

C:\Documents and settings\userName\My Documents

Tijdelijke opslag

C:\Documents and settings\userName\Local Settings\Temp\randomString.tmp

Gebruiker

C:\Documents and settings\userName

De feitelijke native paden voor deze mappen variëren per besturingssysteem en computerconfiguratie. In deze tabel ziet u typische voorbeelden van paden. U dient altijd met de desbetreffende statische eigenschappen voor File-klasse naar deze mappen te verwijzen, zodat uw toepassing op elk platform naar behoren functioneert. In een feitelijke AIR-toepassing worden de waarden voor applicationID en filename die in de tabel staan, ontleend aan de toepassingsbeschrijving. Als u een uitgever-ID opgeeft in de toepassingsbeschrijving, wordt deze aan de toepassings-ID toegevoegd in deze paden. De waarde voor userName is de accountnaam van de gebruiker die de installatie uitvoert.

File-objecten een map laten aanwijzen

Er zijn verschillende manieren om een File-object zo in te stellen dat het een map aanwijst.

De homemap van de gebruiker aanwijzen

U kunt een File-object verwijzen naar de thuismap van de gebruiker. Met de volgende code stelt u een File-object zo in dat het de submap AIR Test van de homemap aanwijst:

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

De documentenmap van de gebruiker aanwijzen

U kunt een File-object de documentenmap van de gebruiker laten aanwijzen. Met de volgende code stelt u een File-object zo in dat het de submap AIR Test van de documentenmap aanwijst:

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

De bureaubladmap aanwijzen

U kunt een File-object het bureaublad laten aanwijzen. Met de volgende code stelt u een File-object zo in dat het de submap AIR Test van het bureaublad aanwijst:

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

De opslagmap van een toepassing aanwijzen

U kunt een File-object de opslagmap van een toepassing laten aanwijzen. Bij iedere AIR-toepassing is er een uniek gekoppeld pad dat de opslagmap van de toepassing definieert. Deze map is uniek voor iedere toepassing en iedere gebruiker. U kunt deze map gebruiken om gebruikers- en toepassingsspecifieke gegevens op te slaan (zoals gebruikersgegevens of voorkeursbestanden). Met de volgende code wijst een File-object bijvoorbeeld een voorkeurenbestand met de naam prefs.xml aan dat zich bevindt in de opslagmap van de toepassing:

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

De locatie van de opslagmap van de toepassing is meestal gebaseerd op de gebruikersnaam en de toepassings-id. U vindt hier de volgende bestandssysteemlocaties om u te helpen met de foutopsporing in uw toepassing. Gebruik altijd de eigenschap File.applicationStorage of het URI-schema app-storage: om bestanden op te lossen in deze map:

  • Op Mac OS: varieert per AIR-versie:

    AIR 3.2 en eerder : /Users/gebruikersnaam/Library/Preferences/ toepassings-id /Local Store/

    AIR 3.3 en hoger : pad /Library/Application Support/ applicationID /Local Store , waarbij pad ofwel /Users/ gebruikersnaam /Library/Containers/ bundle-id /Data is (in een sandbox-omgeving), of /Users/ gebruikersnaam (buiten een sandbox-omgeving)

    Bijvoorbeeld (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • In Windows, in de map Documents and Settings in:

    C:\Documents and Settings\gebruikersnaam \Application Data\ applicationID \Lokale opslag\

    Bijvoorbeeld:

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • Op Linux—In:

    /home/ gebruikersnaam /.appdata/ toepassings-id/ /Local Store/

    Bijvoorbeeld:

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • Android—In:

    /data/data/ androidPackageID / applicationID/Lokale opslag

    Bijvoorbeeld:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Opmerking: Als een toepassing een uitgevers-id heeft, wordt deze id ook gebruikt als onderdeel van het pad naar de opslagmap van de toepassing.

De URL (en de eigenschap url ) van een File-object dat is gemaakt met File.applicationStorageDirectory , gebruikt het URL-schema app-storage (zie Ondersteunde URL-protocollen voor AIR ). Zie het volgende voorbeeld:

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

De toepassingsmap aanwijzen

U kunt een File-object de map laten aanwijzen waarin de toepassing is geïnstalleerd. Deze wordt de toepassingsmap genoemd. U kunt verwijzen naar deze map met behulp van de eigenschap File.applicationDirectory . U kunt deze map gebruiken om het toepassingsdescriptorbestand of andere resources die met de toepassing zijn geïnstalleerd, te onderzoeken. Met de volgende code wijst een File-object bijvoorbeeld de map images in de toepassingsmap aan:

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

De URL (en de eigenschap url ) van een File-object dat is gemaakt met File.applicationDirectory , gebruikt het URL-schema app (zie Ondersteunde URL-protocollen voor AIR ). Zie het volgende voorbeeld:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Opmerking: Op Android zijn de bestanden in het toepassingspakket niet toegankelijk via het nativePath . De eigenschap nativePath is een lege tekenreeks. Gebruik altijd de URL in plaats van een geïntegreerd pad voor toegang tot de bestanden in de toepassingsmap.

De cachemap aanwijzen

U kunt een File-object laten wijzen naar de tijdelijke map of cachemap van het besturingssysteem met de File.cacheDirectory -eigenschap. Deze map bevat tijdelijke bestanden die niet vereist zijn om de toepassing te laten uitvoeren en veroorzaken geen problemen of gegevensverlies voor de gebruiker als ze worden verwijderd.

In de meeste besturingssystemen is de cachemap een tijdelijke map. Op iOS komt de cachemap overeen met de map Caches van de toepassingsbibliotheek. Er worden geen onlineback-ups gemaakt van de bestanden in deze map. Ze kunnen dus mogelijk worden verwijderd door het besturingssysteem als het apparaat over onvoldoende opslagruimte beschikt. Zie Back-ups en caching van bestanden beheren voor meer informatie.

Verwijzen naar het hoofdbestandssysteem

De methode File.getRootDirectories() geeft een lijst weer van alle hoofdvolumes (zoals C:) en alle gekoppelde volumes op een Windows-computer. Op Mac OS en Linux retourneert deze methode altijd de unieke hoofdmap van de computer (de map "/"). De methode StorageVolumeInfo.getStorageVolumes() verschaft meer informatie over gekoppelde opslagvolumes (zie Werken met opslagvolumes ).

Opmerking: De hoofdmap van het bestandssysteem kan niet worden gelezen op Android. Voor een File-object dat naar de map met het geïntegreerde pad verwijst, wordt ''/'' geretourneerd, maar de eigenschappen van dat object hebben niet de juiste waarden. spaceAvailable is bijvoorbeeld altijd 0.

Een expliciete map aanwijzen

U kunt het File-object een expliciete map laten aanwijzen door de eigenschap nativePath van het File-object in te stellen, zoals in het volgende voorbeeld (in Windows):

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

Belangrijk: Op deze manier verwijzen naar een expliciet pad kan leiden naar code die niet op verschillende platformen werkt. Het vorige voorbeeld werkt bijvoorbeeld alleen op Windows. U kunt de statische eigenschappen van het File-object gebruiken, zoals File.applicationStorageDirectory , om een map te zoeken die op verschillende platformen werkt. Gebruik de resolvePath() -methode (zie de volgende sectie) om naar een relatief pad te navigeren.

Navigeren naar relatieve paden

U kunt de methode resolvePath() gebruiken om een pad te verkrijgen dat is gebaseerd op een ander gegeven pad. Met de volgende code stelt u bijvoorbeeld een File-object zo in dat het de submap AIR Test van de homemap van de gebruiker aanwijst:

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

U kunt ook de eigenschap url van een File-object gebruiken om dit een map te laten aanwijzen op basis van een URL-tekenreeks, zoals bij het volgende:

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

Zie Bestandspaden wijzigen voor meer informatie.

De gebruiker naar de gewenste map laten bladeren en deze selecteren

De klasse File bevat de methode browseForDirectory() , die een systeemdialoogvenster presenteert waarin de gebruiker de map kan selecteren die aan het object moet worden toegewezen. De methode browseForDirectory() is asynchroon. Het File-object verzendt de gebeurtenis select als de gebruiker een map selecteert en op de knop Openen klikt. De gebeurtenis cancel wordt verzonden als de gebruiker op de knop Annuleren klikt.

Met de volgende code kan de gebruiker bijvoorbeeld een map selecteren en wordt na selectie het pad van de map als uitvoergegeven ingesteld:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Opmerking: De methode browseForDirectory() wordt niet ondersteund op Android. Het aanroepen van deze methode heeft geen effect, er wordt meteen een annuleringsgebeurtenis verzonden. Als u gebruikers wilt toestaan een map te selecteren, dient u een aangepast, door de toepassing gedefinieerd dialoogvenster te gebruiken.

De map aanwijzen van waaruit de toepassing is opgeroepen

U kunt de locatie opvragen van de map van waaruit een toepassing is opgeroepen door de eigenschap currentDirectory van het InvokeEvent-object te controleren dat wordt verzonden wanneer de toepassing wordt opgeroepen. Zie Opdrachtregelargumenten vastleggen voor meer informatie.

File-objecten een bestand laten aanwijzen

Er zijn verschillende manieren om het bestand in te stellen dat door een File-object wordt aangewezen.

Expliciete bestandspaden aanwijzen

Belangrijk: verwijzen naar een expliciet pad kan leiden tot code die niet op verschillende platformen werkt. Het pad C:/foo.txt werkt bijvoorbeeld alleen op Windows. U kunt de statische eigenschappen van het File-object gebruiken, zoals File.applicationStorageDirectory , om een map te zoeken die op verschillende platformen werkt. Gebruik de resolvePath() -methode (zie Bestandspaden wijzigen ) om naar een relatief pad te navigeren.

U kunt de eigenschap url van een File-object gebruiken om dit een bestand of map te laten aanwijzen op basis van een URL-tekenreeks, zoals in het volgende voorbeeld:

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

U kunt de URL ook doorgeven naar de constructorfunctie File() , zoals in het volgende voorbeeld:

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

De eigenschap url retourneert altijd de URI-gecodeerde versie van de URL (spaties worden bijvoorbeeld vervangen door "%20" ):

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

U kunt ook de eigenschap nativePath van een File-object gebruiken om een expliciet pad in te stellen. Als de volgende code bijvoorbeeld wordt uitgevoerd op een Windows-computer, wordt een File-object ingesteld op het bestand test.txt in de submap AIR Test van het C:-station:

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

U kunt dit pad ook doorgeven naar de constructorfunctie File() , zoals in het volgende voorbeeld:

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

Gebruik het slashteken (/) als het padscheidingsteken voor de nativePath -eigenschap. Op Windows kunt u ook het backslashteken (\) gebruiken, maar dit leidt tot toepassingen die niet op verschillende platformen werken.

Zie Bestandspaden wijzigen voor meer informatie.

Opsommingen maken van bestanden in een map

U kunt de methode getDirectoryListing() van een File-object gebruiken om een array op te halen van File-objecten die bestanden en submappen aanwijzen op het hoofdniveau van een map. Zie Opsommingen maken van mappen voor meer informatie.

De gebruiker naar het gewenste bestand laten bladeren en dit selecteren

De klasse File bevat de volgende methoden die een systeemdialoogvenster presenteren waarin de gebruiker een bestand kan selecteren dat aan het object moet worden toegewezen:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Deze methoden zijn allemaal asynchroon. De methoden browseForOpen() en browseForSave() verzenden de gebeurtenis select wanneer de gebruiker een bestand selecteert (of een doelpad, bij het gebruik van browseForSave()). Met de methoden browseForOpen() en browseForSave() wijst het File-doelobject na selectie de geselecteerde bestanden aan. De methode browseForOpenMultiple() verzendt de gebeurtenis selectMultiple wanneer de gebruiker bestanden selecteert. De gebeurtenis selectMultiple is van het type FileListEvent. Dit type heeft de eigenschap files , die bestaat uit een array van File-objecten (die de geselecteerde bestanden aanwijzen).

De volgende code presenteert de gebruiker bijvoorbeeld met het dialoogvenster “Openen” waarin deze een bestand kan selecteren:

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

Als er in de toepassing een ander dialoogvenster voor het bladeren naar mappen of bestanden open is wanneer u een bladermethode oproept, produceert de runtime een uitzonderingsfout.

Opmerking: Op Android kunt u alleen afbeeldings-, video- en audiobestanden selecteren met de methoden browseForOpen() en browseForOpenMultiple() . Ook in het dialoogvenster browseForSave() worden alleen mediabestanden weergegeven, ook al kan de gebruiker een willekeurige bestandsnaam invoeren. Als u andere bestandstypen wilt openen, kunt u beter aangepaste dialoogvensters gebruiken in plaats van deze methoden.

Bestandspaden wijzigen

U kunt ook het pad van een bestaand File-object wijzigen door de methode resolvePath() op te roepen, of door de eigenschap nativePath of url van het object op te roepen, zoals in de volgende voorbeelden (voor 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 

Wanneer u de eigenschap nativePath gebruikt, moet u het slashteken (/) gebruiken als mapscheidingsteken. Op Windows kunt u ook het backslashteken (\) gebruiken, maar we raden u dit ten sterkste af, omdat dit leidt tot code die niet op verschillende platformen werkt.

Ondersteunde URL-protocollen voor AIR

In AIR kunt u een van de volgende URL-protocollen gebruiken om de url -eigenschap van een File-object te definiëren:

URL-schema

Beschrijving

file

Wordt gebruikt om een pad op te geven dat is gebaseerd op de hoofdmap van het bestandssysteem. Bijvoorbeeld:

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

De URL-standaard bepaalt dat een bestands-URL de volgende vorm heeft: file://<host>/<pad> . Als speciaal geval kan <host> een lege tekenreeks zijn. Dit wordt geïnterpreteerd als "de computer van waaruit de URL wordt geïnterpreteerd". Om deze reden hebben bestands-URL's vaak drie schuine strepen (///).

app

Wordt gebruikt om een pad op te geven dat is gebaseerd op de hoofdmap (de map met het bestand application.xml van de geïnstalleerde toepassing) van de geïnstalleerde toepassing. Het volgende pad wijst bijvoorbeeld de submap images van de map van de geïnstalleerde toepassing aan:

app:/images

app-storage

Wordt gebruikt om een pad op te geven dat is gebaseerd op de opslagmap van de toepassing. Voor elke geïnstalleerde toepassing definieert AIR een unieke opslagmap. Dit is de plaats waar gegevens worden opgeslagen die eigen zijn aan die toepassing. Het volgende pad verwijst bijvoorbeeld naar het bestand prefs.xml in de submap settings van de opslagmap van een toepassing:

app-storage:/settings/prefs.xml

Back-ups en caching van bestanden beheren

Bepaalde besturingssystemen, met name iOS en Mac OS X, bieden gebruikers de mogelijkheid om automatisch back-ups te maken van toepassingsbestanden naar een externe opslagruimte. Bovendien gelden er op iOS beperkingen over het al dan niet maken van back-ups van bestanden en waar bestanden met verschillende doeleinden kunnen worden opgeslagen.

Het volgende vat samen hoe de richtlijnen van Apple voor het maken van back-ups en het opslaan van bestanden moeten worden nageleefd. Zie de volgende secties voor meer informatie.

  • Om op te geven dat er geen back-up van een bestand moet worden gemaakt en dat (alleen op iOS) een bestand kan worden verwijderd door het besturingssysteem als het apparaat over onvoldoende opslagruimte beschikt, slaat u het bestand op in de cachemap ( File.cacheDirectory ). Dit is de voorkeursopslaglocatie op iOS en deze moet worden gebruikt voor de meeste bestanden die opnieuw kunnen worden gegenereerd of gedownload.

  • Om op te geven dat er geen back-up van een bestand moet worden gemaakt, maar dat het bestand niet moet worden verwijderd door het besturingssysteem, slaat u het bestand op in een van de mappen van de toepassingsbibliotheek, zoals de toepassingsopslagmap ( File.applicationStorageDirectory ) of de documentenmap ( File.documentsDirectory ). Stel de preventBackup -eigenschap van het File-object in op true . Dit is verplicht door Apple voor inhoud die opnieuw kan worden gegenereerd of gedownload, maar die vereist is voor een goede werking van uw toepassing tijdens offlinegebruik.

Bestanden opgeven voor back-up

Om back-upruimte te besparen en het gebruik van de netwerkbandbreedte te verminderen, geven de richtlijnen van Apple voor iOS- en Mac-toepassingen op dat alleen bestanden met door gebruikers ingevoerde gegevens of gegevens die niet op een andere manier opnieuw kunnen worden gegenereerd of gedownload, moeten worden opgegeven voor back-up.

Standaard wordt van alle bestanden in de toepassingsbibliotheekmappen een back-up gemaakt. Op Mac OS X is dit de opslagmap van de toepassing. Op iOS omvat dit de opslagmap van de toepassing, de toepassingsmap, de bureaubladmap, de documentenmap en de gebruikersmap (omdat deze mappen zijn toegewezen aan toepassingsbibliotheekmappen op iOS). Bijgevolg worden standaard back-ups gemaakt naar de serveropslag van alle bestanden in deze mappen.

Als u een bestand opslaat op een van deze locaties die door uw toepassing opnieuw kunnen worden gemaakt, moet u het bestand markeren zodat het besturingssysteem weet dat het hiervan geen back-up moet maken. Stel de preventBackup -eigenschap van het File-object in op true om aan te duiden dat er geen back-up moet worden gemaakt van een bestand.

Merk op dat op iOS een bestand in een van de toepassingsbibliotheekmappen wordt gemarkeerd als een permanent bestand dat niet mag worden verwijderd door het besturingssysteem, zelfs als de preventBackup -eigenschap van dat bestand is ingesteld op true .

Caching en verwijderen van bestanden beheren

De richtlijnen van Apple voor iOS-bestanden geven aan dat inhoud die opnieuw kan worden gegenereerd, zoveel mogelijk ter beschikking moet worden gesteld van het besturingssysteem om te worden verwijderd voor het geval dat het apparaat over onvoldoende opslagruimte beschikt.

Op iOS worden bestanden in de toepassingsbibliotheekmappen (zoals de opslagmap van de toepassing of de documentenmap) als permanent gemarkeerd en worden deze niet verwijderd door het besturingssysteem.

Sla bestanden op die door de toepassing opnieuw kunnen worden gegenereerd en zonder problemen kunnen worden verwijderen voor het geval dat de cachemap van de toepassing over onvoldoende opslagruimte beschikt. U krijgt toegang tot de cachemap met de statische eigenschap File.cacheDirectory .

Op iOS stemt de cachemap overeen met de cachemap van de toepassing (<Application Home>/Library/Caches). Op andere besturingssystemen wordt deze map toegewezen aan een vergelijkbare map. Op Mac OS X, bijvoorbeeld, wordt deze ook toegewezen aan de map Caches in de toepassingsbibliotheek. Op Android wordt de cachemap toegewezen aan de cachemap van de toepassing. Op Windows wordt de cachemap toegewezen aan de map temp van het besturingssysteem. Op zowel Android als Windows is dit dezelfde map die wordt geopend door de methoden createTempDirectory() en createTempFile() van de File-klasse aan te roepen.

Het relatieve pad tussen twee bestanden opzoeken

U kunt de methode getRelativePath() gebruiken om het relatieve pad tussen twee bestanden op te zoeken:

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 

De tweede parameter van de methode getRelativePath() , de parameter useDotDot maakt het mogelijk dat de syntaxis .. wordt geretourneerd in resultaten om bovenliggende mappen aan te geven:

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 

Canonieke versies van bestandsnamen verkrijgen

Bestandsnamen en padnamen zijn niet hoofdlettergevoelig in Windows en Mac OS. In het volgende voorbeeld wijzen twee File-objecten hetzelfde bestand aan:

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

Documenten en mapnamen maken echter wel gebruik van hoofdletters en kleine letters. Bij het volgende wordt ervan uitgegaan dat de documentenmap een map met de naam AIR Test bevat, zoals in de volgende voorbeelden:

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

De methode canonicalize converteert het nativePath -object zodat de juiste hoofdletters en kleine letters worden gebruikt voor de bestands- of mapnaam. Als er bij hoofdlettergevoelige systemen (zoals Linux) meerdere bestanden zijn waarvan de namen alleen verschillen wat betreft hoofdlettergebruik, past de methode canonicalize() het pad aan zodat het past bij het eerste bestand dat wordt aangetroffen (in de volgorde die wordt bepaald door het bestandssysteem).

U kunt de methode canonicalize() ook gebruiken om korte bestandsnamen ("8.3"-namen) te converteren naar lange bestandsnamen in Windows, zoals in de volgende voorbeelden:

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

Werken met pakketten en symbolische koppelingen

Verschillende besturingssystemen ondersteunen pakketbestanden en symbolische koppelingsbestanden:

Pakketten In Mac OS kunnen mappen worden aangewezen als pakketten. Ze worden dan in de Finder van Mac OS als één bestand en niet als een map weergegeven.

Symbolische koppelingen Mac OS, Linux en Windows Vista ondersteunen symbolische koppelingen. Met symbolische koppelingen kan een bestand naar een ander bestand of een map op de schijf verwijzen. Symbolische koppelingen zijn vergelijkbaar met aliassen, maar ze zijn niet hetzelfde. Een alias wordt altijd als een bestand (en niet als een map) gerapporteerd, en het lezen van of schrijven naar een alias of snelkoppeling is nooit van invloed op het oorspronkelijke bestand of de map die deze aanwijst. Een symbolische koppeling daarentegen gedraagt zich precies hetzelfde als het bestand of de map die deze koppeling aanwijst. Een symbolische koppeling kan als een bestand of een map worden gerapporteerd. Het lezen van of schrijven naar een symbolische koppeling is van invloed op het bestand of de map die deze koppeling aanwijst, en niet op de symbolische koppeling zelf. Verder is onder Windows de eigenschap isSymbolicLink voor een object File dat verwijst naar een junction point (wordt gebruikt in het NTFS-bestandssysteem) ingesteld op true .

De klasse File bevat de eigenschappen isPackage en isSymbolicLink , waarmee kan worden gecontroleerd of een File-object naar een pakket dan wel naar een symbolische koppeling verwijst.

De volgende code doorzoekt de bureaubladmap van de gebruiker en geeft een lijst weer van de submappen die geen pakketten zijn:

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

De volgende code doorzoekt de bureaubladmap van de gebruiker en geeft een lijst weer van de bestanden en mappen die geen symbolische koppelingen zijn:

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

De methode canonicalize() wijzigt het pad van een symbolische koppeling zodat deze het bestand of de map aanwijst waarnaar de koppeling verwijst. De volgende code doorzoekt de bureaubladmap van de gebruiker en rapporteert de paden waarnaar wordt verwezen door bestanden die symbolische koppelingen zijn:

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

De beschikbare ruimte op een volume bepalen

De eigenschap spaceAvailable van een File-object is de beschikbare ruimte op de File-locatie, in bytes. De volgende code controleert bijvoorbeeld de ruimte die beschikbaar is in de opslagmap van de toepassing:

trace(File.applicationStorageDirectory.spaceAvailable); 

Als het File-object verwijst naar een map, geeft de eigenschap spaceAvailable de ruimte aan die in die map beschikbaar is voor bestanden. Als het File-object verwijst naar een bestand, geeft de eigenschap spaceAvailable de ruimte aan die beschikbaar is als het bestand in grootte toeneemt. Als de bestandslocatie niet bestaat, wordt de eigenschap spaceAvailable ingesteld op 0. Als het File-object verwijst naar een symbolische koppeling, wordt de eigenschap spaceAvailable ingesteld op de ruimte die beschikbaar is op de locatie die de symbolische koppeling aanwijst.

De ruimte die beschikbaar is voor een bestand of map, is in het algemeen hetzelfde als de ruimte die beschikbaar is op het volume dat het bestand of de map bevat. Bij de beschikbare ruimte kan echter rekening worden gehouden met accountquota's en groottebeperkingen per map.

Het toevoegen van een bestand of map aan een volume vereist in het algemeen meer ruimte dan de werkelijke grootte van het bestand of de grootte van de inhoud van de map. Het besturingssysteem kan bijvoorbeeld meer ruimte nodig hebben om indexgegevens op te slaan. Het is ook mogelijk dat de vereiste schijfsectoren meer ruimte gebruiken. Bovendien verandert de beschikbare ruimte dynamisch. U kunt dus niet verwachten dat de volledige gerapporteerde schijfruimte kan worden toegewezen voor bestandsopslag. Zie Lezen van en schrijven naar bestanden voor meer informatie.

De methode StorageVolumeInfo.getStorageVolumes() verschaft meer informatie over gekoppelde opslagvolumes (zie Werken met opslagvolumes ).

Bestanden openen met de standaardsysteemtoepassing

In AIR 2 kunt u een bestand openen met de toepassing die hiervoor bij het besturingssysteem is geregistreerd. Een AIR-toepassing kan bijvoorbeeld een DOC-bestand openen met de toepassing die hiervoor geregistreerd is. Gebruik de methode openWithDefaultApplication() van een File-object om het bestand te openen. Met de volgende code wordt bijvoorbeeld het bestand test.doc geopend op het bureaublad van de gebruiker. Dit bestand wordt geopend met de standaardtoepassing voor DOC-bestanden:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Opmerking: Op het Linux-platform wordt de standaardtoepassing van een bestand bepaald door het MIME-type van het bestand en niet door de extensie van de bestandsnaam.

Met de volgende code kan de gebruiker naar een MP3-bestand navigeren en dit openen in de standaardtoepassing voor het afspelen van MP3-bestanden:

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

De methode openWithDefaultApplication() kan niet worden gebruikt voor bestanden in de toepassingsmap.

Er zijn een aantal bestanden die in Air niet kunnen worden geopend met de methode openWithDefaultApplication() . In Windows kunt u bestanden met bepaalde bestandstypen, zoals bestanden met de indeling .exe of .bat, niet openen. Bij Mac OS- en Linux-systemen voorkomt AIR dat u bestanden voor een bepaalde toepassing kunt openen. (Hieronder vallen Terminal en AppletLauncher op Mac OS-systemen en csh, bash of ruby op Linux-systemen.) Er wordt een uitzondering gegenereerd als u een van deze bestanden met de methode openWithDefaultApplication() probeert te openen. Zie in de taalnaslag de vermelding voor de methode File.openWithDefaultApplication() voor een complete lijst met bestandstypen die niet kunnen worden geopend.

Opmerking: Deze beperking geldt niet voor AIR-toepassingen die met een native installatieprogramma zijn geïnstalleerd (een uitgebreide desktoptoepassing).