Работа с объектами File в AIR

Adobe AIR 1.0 и более поздних версий

Объект File является указателем на файл или каталог в файловой системе.

Класс File является расширением класса FileReference. Класс FileReference, встречающийся в проигрывателе Adobe® Flash® и среде AIR™, является указателем на файл. В класс File добавлены свойства и методы, из соображений безопасности не представленные в проигрывателе Flash (при проигрывании SWF-файла в браузере).

О классе File

Класс File имеет целый ряд применений:

  • Получение путей к определенным каталогам, включая каталог пользователей, каталог документов пользователей, каталог запуска приложения и каталог самого приложения.

  • Копирование файлов и каталогов

  • Перемещение файлов и каталогов

  • Удаление файлов и каталогов (или перемещение в корзину)

  • Составление списка файлов и каталогов внутри каталога

  • Создание временных файлов и папок

Объект File, указывающий путь к файлу, можно использовать для чтения и записи данных с помощью класса FileStream.

Объект File может указывать путь к еще не существующему файлу или каталогу. В этом случае этот объект можно использовать для создания файла или каталога.

Пути к объектам File

У каждого объекта File есть два свойства, определяющие его путь:

Свойство

Описание

nativePath

Указывает путь к файлу с учетом конкретной платформы. Например, в Windows это может быть «С:\Sample directory\test.txt», а в Mac OS — «/Sample directory/test.txt». В Windows в свойстве nativePath в качестве разделителя используется обратная косая черта (\), а в Mac OS и Linux — прямая косая черта (/).

url

Это может быть схема URL-адресов для файлов, указывающая на файл. Например, в Windows это может быть «file:///c:/Sample%20directory/test.txt», а в Mac OS — «file:///Sample%20directory/test.txt». Помимо схемы file , среда выполнения включает и другие специальные URL-схемы, подробнее описанные в разделе Поддерживаемые AIR схемы URL-адресов

Класс File включает в себя статические свойства для указания на стандартные каталоги в ОС Mac OS, Windows и Linux. К таким свойствам относятся:

  • File.applicationStorageDirectory — каталог хранилища, который является уникальным для каждого установленного приложения AIR. Этот каталог подходит для хранения динамических активов приложений и настроек пользователя. Большие объемы данных рекомендуется хранить в другом месте.

    На устройствах Android и iOS каталог хранилища приложения удаляется при удалении приложения с устройства или когда пользователь выполняет очистку данных приложения, однако на других платформах такого не происходит.

  • File.applicationDirectory — каталог, в который устанавливается приложение (вместе с установленными активами). В некоторых операционных системах приложение хранится в одном пакетном файле, а не в физическом каталоге. В этом случае содержимое может стать недоступным, если используется собственный путь. Каталог приложения доступен только для чтения.

  • File.desktopDirectory — каталог рабочего стола пользователя. Если платформа не определяет каталог рабочего стола, используется другой каталог в файловой системе.

  • File.documentsDirectory — каталог с документами пользователя. Если платформа не определяет каталог документов, используется другой каталог в файловой системе.

  • File.userDirectory — каталог пользователя. Если платформа не определяет каталог пользователя, используется другой каталог в файловой системе.

Примечание. Если платформа не определяет стандартные каталоги рабочего стола, каталог документов пользователя и каталог пользователя, File.documentsDirectory , File.desktopDirectory и File.userDirectory могут указывать на один и тот же каталог.

В различных операционных системах эти свойства имеют разные значения. Например, в ОС Mac и Windows собственные пути к каталогу рабочего стола пользователя различаются. Однако свойство File.desktopDirectory указывает соответствующий путь к каталогу на каждой платформе. При создании приложений для работы на различных платформах используйте эти свойства как основу для указания на другие каталоги и файлы, используемые приложением. Затем используйте метод resolvePath() для коррекции пути. Например, данный код указывает на файл preferences.xml в каталоге хранилища приложения:

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

Хотя класс File позволяет указывать определенный путь к файлу, он может привести к приложениям, которые не могут работать на разных платформах. Например, путь C:\Documents and Settings\joe\ работает только в ОС Windows. По этим причинам лучше использовать статические свойства класса File, такие как File.documentsDirectory .

Типовое расположение каталогов

Платформа

Тип каталога

Стандартное расположение в файловой системе

Android

Приложение

/data/data/

Хранилище приложения

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

Кэш

/data/data/applicationID/cache

Настольный компьютер

/mnt/sdcard

Документы

/mnt/sdcard

Временный

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

Пользователь

/mnt/sdcard

iOS

Приложение

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

Хранилище приложения

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

Кэш

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

Настольный компьютер

недоступен

Документы

/var/mobile/Applications/uid/Documents

Временный

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

Пользователь

недоступен

Linux

Приложение

/opt/filename/share

Хранилище приложения

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

Настольный компьютер

/home/userName/Desktop

Документы

/home/userName/Documents

Временный

/tmp/FlashTmp.randomString

Пользователь

/home/userName

Mac

Приложение

/Applications/filename.app/Contents/Resources

Хранилище приложения

/Users/ userName /Library/Preferences/ applicationid /Local Store (AIR 3.2 и более ранних версий)

path /Library/Application Support/ applicationid /Local Store (AIR 3.3 и более поздних версий), где path — это /Users/ userName /Library/Containers/ bundle-id /Data (изолированная среда) или /Users/userName (при выполнении за пределами изолированной среды)

Кэш

/Users/userName/Library/Caches

Настольный компьютер

/Users/ userName /Desktop

Документы

/Users/ userName /Documents

Временный

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

Пользователь

/Users/ userName

Windows

Приложение

C:\Program Files\filename

Хранилище приложения

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

Кэш

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

Настольный компьютер

C:\Documents and settings\userName\Desktop

Документы

C:\Documents and settings\userName\My Documents

Временный

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

Пользователь

C:\Documents and settings\userName

Фактические собственные пути к этим каталогам варьируются в зависимости от операционной системы и конфигурации компьютера. Пути, показанные в данной таблице, являются типовыми примерами. При ссылке на эти каталоги всегда следует использовать соответствующие статические свойства класса File. В приложении AIR значения свойств applicationID и filename , приведенные в таблице, взяты из дескриптора приложения. Если в дескрипторе приложения указано свойство publisher ID, идентификатор издателя будет добавлен к идентификатору приложения в этих путях. Значением свойства userName является имя учетной записи пользователя, выполняющего установку.

Объект File, указывающий на каталог

Существует ряд способов настроить объект File так, чтобы он указывал на каталог.

Указание на начальный каталог пользователя

Объект File может указывать на начальный каталог пользователя. В приведенном ниже коде объект File указывает на подкаталог AIR Test начального каталога:

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

Указание на каталог документов пользователя

Объект File может указывать на каталог документов пользователя. В приведенном ниже коде объект File указывает на подкаталог AIR Test каталога документов:

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

Указание на каталог рабочего стола пользователя

Объект File может указывать на каталог рабочего стола. В приведенном ниже коде объект File указывает на подкаталог AIR Test рабочего стола:

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

Указание на каталог хранилища приложения

Объект File может указывать на каталог хранилища приложения. В каждом приложении AIR есть путь, определяющий каталог хранилища данных этого приложения. Этот каталог уникален для каждого приложения и каждого пользователя. Его можно использовать для хранения информации, связанной с конкретным пользователем или приложением (например, файлы данных или настроек). Например, в приведенном ниже коде объект File указывает на файл настроек prefs.xml, содержащийся в каталоге хранилища приложения:

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

Местоположение каталога хранилища программы обычно складывается из имени пользователя и идентификатора приложения. Представленная ниже информация о местоположениях в файловой системе будет полезна при выполнении отладки приложения. Для нахождения файлов в этом каталоге всегда используйте свойство File.applicationStorage или схему URI app-storage:

  • В ОС Mac OS — зависит от версии AIR:

    AIR 3.2 и более ранних версий : /Users/user name/Library/Preferences/ applicationID /Local Store/

    AIR 3.3 и более поздних версий : path /Library/Application Support/ applicationID /Local Store , где path — это /Users/ username /Library/Containers/ bundle-id /Data (изолированная среда) или /Users/ username (при выполнении за пределами изолированной среды)

    Например (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • В Windows — в каталоге Documents and Settings, в папке:

    C:\Documents and Settings\имя пользователя \Application Data\ applicationID \Local Store\

    Например:

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • В Linux — в каталоге:

    /home/ имя пользователя /.appdata/ идентификатор приложения /Local Store/

    Например:

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

    /data/data/ androidPackageID / applicationID/Local Store

    Например:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Примечание. Если у приложения имеется идентификатор издателя, то он также используется для указания пути к каталогу хранилища этого приложения.

URL-адрес (и свойство url ) объекта File, созданного с помощью File.applicationStorageDirectory , использует схему URL-адресов app-storage (см. раздел Поддерживаемые AIR схемы URL-адресов ), как показано ниже:

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

Указание на каталог приложения

Объект File может указывать на каталог, в который установлено приложение (т.н. каталог приложения). На этот каталог можно ссылаться с помощью свойства File.applicationDirectory . В нем можно найти файл дескриптора и другие ресурсы, установленные вместе с приложением. Например, в приведенном ниже коде объект File указывает на каталог images внутри каталога приложения:

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

URL-адрес (и свойство url ) объекта File, созданного с помощью File.applicationDirectory , использует схему URL-адресов app (см. раздел Поддерживаемые AIR схемы URL-адресов ), как показано ниже:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Примечание. В Android свойство nativePath не может быть использовано для получения доступа к файлам в пакете приложения. Свойство nativePath представляет собой пустую строку. При обращении к файлам в каталоге приложения всегда используйте URL вместо собственного пути.

Указание на каталог кэша

Объекту File можно указать на временный каталог операционной системы (каталог кэша) при помощи свойства File.cacheDirectory . Такой каталог содержит временные файлы, не являющиеся необходимыми для работы приложений и не вызывающие проблем или потери данных пользователя при удалении.

На большинстве операционных систем каталог кэша является временным каталогом. В системе iOS каталог кэша соответствует каталогу Caches библиотеки приложений. Файлы в этом каталоге не подлежат резервному копированию на серверное хранилище и могут быть удалены операционной системой, если заканчивается свободное место на устройстве. Дополнительные сведения см. в разделе Управление резервным копированием и кэшированием файлов .

Указание на корневой каталог файловой системы

Метод File.getRootDirectories() составляет список всех корневых томов, таких как «C:», и подключенных томов на компьютере Windows. В ОС Mac и Linux этот метод всегда возвращает уникальный корневой каталог компьютера (каталог «/»). Метод StorageVolumeInfo.getStorageVolumes() предоставляет дополнительные сведения о подключенных томах запоминающих устройств (см. раздел « Работа с томами запоминающих устройств »).

Примечание. В Android отсутствует доступ для чтения корневого каталога файловой системы. Возвращается объект File, указывающий на каталог с собственным путем «/», однако свойства этого объекта не имеют точных значений. Например, свойство spaceAvailable всегда равно 0.

Указание на явно заданный каталог

Объект File может указывать на явно заданный каталог. Для этого нужно задать свойство nativePath объекта File, как показано в примере ниже (в Windows):

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

Важно: такое указание явного пути может привести к тому, что код не будет работать на разных платформах. Например, предыдущий пример работоспособен только в ОС Windows. Для определения местонахождения каталога, работающего с разными платформами, можно использовать статические свойства объекта File, например File.applicationStorageDirectory . Для навигации по относительному пути используйте метод resolvePath() (см. следующий раздел).

Навигация с использованием относительных путей

Метод resolvePath() может использоваться для получения пути относительно другого пути. Например, объект File указывает на подкаталог AIR Test начального каталога пользователя.

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

Свойство url объекта File может указывать на каталог на основе URL-строки, как показано ниже:

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

Дополнительные сведения см. в разделе « Изменение путей к файлу ».

Разрешение пользователю обзора для выбора каталога

Класс File включает метод browseForDirectory() , выводящий системное диалоговое окно, в котором пользователь может выбрать каталог и назначить его объекту. Метод browseForDirectory() является асинхронным. Объект File отправляет событие select , если пользователь выбирает каталог и нажимает кнопку «Открыть», или событие cancel , если пользователь нажимает кнопку «Отмена».

Например, в приведенном ниже коде пользователь может выбрать каталог и на основе этого выбора создать путь вывода:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Примечание. В Android метод browseForDirectory() не поддерживается. Вызов этого метода не дает никаких результатов. Моментально отправляется событие cancel. Чтобы разрешить пользователям выбирать каталог, используйте вместо этого пользовательское диалоговое окно, определенное приложением.

Указание на каталог, из которого запускается приложение

Расположение каталога, из которого запускается приложение, можно получить, проверив свойство currentDirectory объекта InvokeEvent, отправляемого при запуске приложения. Дополнительные сведения см. в разделе « Захват аргументов командной строки ».

Объект File, указывающий на файл

Существует несколько способов задания файла, на который указывает объект File.

Указание на явно заданный путь к файлу

Важно: указание явного пути может привести к тому, что код не будет работать на разных платформах. Например, использование пути C:/foo.txt применимо только в ОС Windows. Для определения местонахождения каталога, работающего с разными платформами, можно использовать статические свойства объекта File, например File.applicationStorageDirectory . Для навигации по относительному пути используйте метод resolvePath() (см. раздел « Изменение путей к файлу »).

Свойство url объекта File может указывать на файл или каталог на основе URL-строки, как показано ниже:

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

Также можно передать функции конструктора File() URL-адрес, как показано ниже:

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

Свойство url всегда возвращает URL в формате URI (например, пробелы замещаются знаками "%20 ):

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

Также свойство nativePath объекта File можно использовать для явного задания пути. Например, если приведенный ниже код запустить на компьютере под управлением Windows, то объект File будет указывать на файл text.txt в подкаталоге AIR Test на диске «С:»:

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

Также можно передать этот путь функции конструктора File() , как показано ниже:

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

В качестве разделителя пути к файлу в свойстве nativePath следует использовать переднюю косую черту (/). В Windows можно также использовать обратную косую черту (\), но при этом приложение может не работать на других платформах.

Дополнительные сведения см. в разделе « Изменение путей к файлу ».

Нумерация файлов в каталоге

С помощью метода getDirectoryListing() объекта File можно получить массив объектов File, указывающих на файлы и подкаталоги в корневом каталоге. Дополнительные сведения см. в разделе « Нумерация каталогов ».

Разрешение пользователю обзора для выбора файла

Класс File включает следующие методы, выводящие системное диалоговое окно, в котором пользователь может выбрать файл и назначить его объекту:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Все они асинхронны. Методы browseForOpen() и browseForSave() отправляют событие select, когда пользователь выбирает файл (или, в случае метода browseForSave(), целевой путь). В случае методов browseForOpen() и browseForSave() , выбранный целевой объект File указывает на выбранные файлы. Метод browseForOpenMultiple() отправляет событие selectMultiple , когда пользователь выбирает файлы. Событие selectMultiple относится к типу FileListEvent, имеющему свойство files , которое является массивом объектов File (указывающих на выбранные файлы).

Например, в приведенном ниже коде пользователь выбирает файл в диалоговом окне «Открыть»:

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

Если при вызове метода browse в приложении уже открыто другое диалоговое окно, среда выполнения генерирует исключение Error.

Примечание. В Android с помощью методов browseForOpen() и browseForOpenMultiple() можно выбирать только файлы изображений, видео и аудио. В диалоговом окне browseForSave() также отображаются только файлы мультимедиа, несмотря на то что пользователь имеет возможность ввести произвольное имя файла. Для открытия и сохранения других файлов, кроме файлов мультимедиа, рассмотрите возможность использования пользовательских диалоговых окон вместо этих методов.

Изменение путей к файлу

Путь к существующему объекту File можно изменить, вызвав метод resolvePath() или изменив свойство nativePath или url объекта, как показано ниже (для 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 

При использовании свойства nativePath в качестве разделителя пути к файлу используйте переднюю косую черту (/). В Windows можно также использовать обратную косую черту (\), но при этом приложение может не работать на других платформах.

Поддерживаемые AIR схемы URL-адресов

В AIR для определения свойства url объекта File могут использоваться следующие схемы URL-адресов.

Схема URL-адресов

Описание

file

Используется для задания путей относительно корневого тома файловой системы. Например:

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

Стандарт URL требует, чтобы URL-адрес файла записывался в виде file://<host>/<path> . В отдельных случаях <host> может быть пустой строкой, которая интерпретируется как «компьютер, с которого получается интерпретируемый URL-адрес». По этой причине URL-адреса файлов часто обозначаются тремя косыми чертами (///).

app

Используется для задания путей относительно корневого каталога установленного приложения (каталога, содержащего файл application.xml установленного приложения). Например, следующий путь указывает на подкаталог с изображениями в каталоге установленного приложения:

app:/images

app-storage

Используется для задания путей относительно каталога хранилища приложения. AIR определяет для каждого установленного приложения уникальный каталог хранилища, куда сохраняются все данные, относящиеся к этому приложению. Например, следующий путь указывает на файл prefs.xml в подкаталоге параметров каталога хранилища приложения:

app-storage:/settings/prefs.xml

Управление резервным копированием и кэшированием файлов

Некоторые операционные системы, в частности, iOS и Mac OS X, имеют возможность автоматического резервного копирования файлов приложений на удаленное хранилище. Кроме того, в iOS существуют определенные правила, касающиеся резервного копирования и мест хранения файлов с различным назначением.

Ниже приведен краткий обзор этих правил — рекомендаций Apple в отношении резервного копирования и хранения файлов. Дополнительная информация приведена в следующих разделах.

  • Если файл не подлежит резервному копированию и (только в iOS) может быть удален операционной системой при сокращении свободного места на устройстве, его следует сохранить в каталог кэша ( File.cacheDirectory ). Этот каталог является предпочтительным местом хранения файлов на iOS, его следует использовать для большинства файлов, которые могут быть созданы или загружены заново.

  • Если файл не подлежит резервному копированию, но также не подлежит удалению операционной системой, его следует сохранить в один их каталогов библиотеки приложений, например в каталог хранилища приложений ( File.applicationStorageDirectory ) или в каталог документов ( File.documentsDirectory ). Свойство preventBackup такого объекта File следует задать как true . Таковы рекомендации Apple в отношении содержимого, которое можно восстановить или загрузить заново, но которое необходимо для правильной работы приложения в автономном режиме.

Назначение файлов для резервного копирования

В целях экономии пропускной способности и места в резервном хранилище рекомендации Apple для приложений систем iOS и Mac гласят, что для резервного копирования следует назначать только те файлы, которые содержат пользовательские данные или данные, которые невозможно восстановить или загрузить заново.

По умолчанию резервному копированию подвергаются все файлы в каталогах библиотеки приложений. В системе Mac OS X это каталог хранилища приложений (application storage). В системе iOS это каталог хранилища приложений (application storage), каталог приложений (application), каталог рабочего стола (desktop), каталог документов (documents) и каталог пользователя (user) — эти каталоги соответствуют каталогам библиотеки приложений в iOS. Соответственно, все файлы в этих каталогах по умолчанию подвергаются резервному копированию на серверное хранилище.

При сохранении в один из этих каталогов файла, который может быть создан приложением заново, следует отметить особым флагом, что этот файл не подлежит резервному копированию операционной системой. Для этого необходимо задать у этого объекта File свойство preventBackup со значением true .

Обратите внимание, что в iOS при размещении файла в любом из каталогов библиотеки приложений, даже если свойство preventBackup файла имеет значение true , этот файл помечается как постоянный и не подлежит удалению операционной системой.

Управление кэшированием и удалением файлов

Рекомендации Apple для приложений iOS гласят, что операционная система должна иметь возможность в случае, если устройство испытывает недостаток места хранения, удалить как можно больший объем содержимого, подлежащего восстановлению.

В iOS файлы в каталогах библиотеки приложений (например, в каталоге хранилища приложений или в каталоге документов) помечаются как постоянные и не подлежат удалению операционной системой.

Файлы, которые могут быть созданы приложением заново и которые можно без опаски удалить в случае недостатка свободного места, следует хранить в каталоге кэша приложений. Доступ к каталогу кэша осуществляется через статическое свойство File.cacheDirectory .

В системе iOS этот каталог кэша соответствует каталогу кэша приложений (<Application Home>/Library/Caches). В других операционных системах этому свойству так же присваивается путь к соответствующему каталогу. К примеру, в Mac OS X это тот же каталог Caches в библиотеке приложений. В ОС Android каталог кэша соответствует каталогу кэша приложений. В ОС Windows каталог кэша соответствует временному каталогу операционной системы. И на Android, и на Windows именно в этом местоположении создаются временные файлы и каталоги при вызове методов createTempDirectory() и createTempFile() класса File.

Нахождение одного пути к файлу относительно другого

Метод getRelativePath() может использоваться для нахождения пути к одному файлу относительно другого:

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 

Второй параметр метода getRelativePath() useDotDot — позволяет возвращать синтаксис .. для определения родительских каталогов:

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 

Получение канонических версий имен файлов

Имена файлов и пути к ним в Windows и Mac OS не учитывают регистр. В примере ниже два объекта File указывают на один и тот же файл:

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

Однако в именах документов и каталогов используются заглавные буквы. Так, в примерах ниже мы исходим из того, что в каталоге документов существует некая папка с названием AIR Test:

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

Метод canonicalize() преобразует объект nativePath так, чтобы в имени файла или каталога использовался правильный регистр. В файловых системах, чувствительных к регистру (таких как Linux), если существует несколько файлов, имена которых различаются только регистрами, метод canonicalize() настраивает путь для первого найденного файла (в порядке, определяемом файловой системой).

Метод canonicalize() также можно использовать для преобразования коротких имен файлов (имен «8.3») в длинные имена в Windows, как показано ниже:

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

Работа с пакетами и символьными ссылками

Разные операционные системы поддерживают пакетные файлы и файлы символьных ссылок:

Пакеты . В Mac OS каталог может быть назначен пакетом и в этом случае будет отображаться в файловом менеджере Mac OS Finder как единый файл, а не как каталог.

Символьные ссылки . Символьные ссылки поддерживаются в Mac OS, Linux и Windows Vista. С помощью символьных ссылок один файл может ссылаться на другой файл или каталог на диске. Не путайте символьные ссылки с псевдонимами. Псевдонимы всегда считаются файлами (не каталогами), а чтение или запись псевдонимов и ярлыков никаким образом не изменяет файлы, на которые они указывают. Символьная ссылка, в свою очередь, повторяет поведение файла или каталога, на который она указывает. Она может считаться файлом или каталогом, а при чтении и записи символьной ссылки изменения будут производиться над самим файлом, на который она указывает, а не над ссылкой. Кроме того, в Windows для свойства isSymbolicLink объекта File, ссылающегося на узловой пункт (используется в файловой системе NTFS), устанавливается значение true .

Класс File включает свойства isPackage и isSymbolicLink , позволяющие проверить, ссылается ли объект File на пакет или символьную ссылку.

В приведенном ниже коде каталог рабочего стола просматривается и создается список подкаталогов, не являющихся пакетами:

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

В приведенном ниже коде просматривается каталог рабочего стола и создается список файлов и каталогов, не являющихся символьными ссылками:

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

Метод canonicalize() изменяет путь к символьной ссылке, так чтобы он указывал на файл или каталог, на который она ссылается. В приведенном ниже коде просматривается каталог рабочего стола пользователя и выводятся пути, на которые ссылаются файлы, являющиеся символьными ссылками:

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

Определение свободного места на томе

Свойство spaceAvailable объекта File указывает на количество свободного места в расположении объекта File в байтах. Например, в приведенном ниже коде проверяется свободное место в каталоге хранилища приложения.

trace(File.applicationStorageDirectory.spaceAvailable); 

Если объект File ссылается на каталог, свойство spaceAvailable указывает объем свободного места, доступного для использования файлом. Если объект File ссылается на файл, свойство spaceAvailable обозначает объем, который потенциально может занять файл. Если расположения файла не существует, свойство spaceAvailable принимает значение 0. Если объект File ссылается на символьную ссылку, свойство spaceAvailable означает свободный объем в том месте, на которое указывает символьная ссылка.

Как правило, объем, который потенциально может занять файл, равен свободному объему всего тома, на котором содержится файл или каталог. Тем не менее при подсчете свободного места могут учитываться квоты и ограничения на каждый каталог.

При добавлении к тому файла или каталога, как правило, требуется чуть больше места, чем сам размер файла или каталога. Например, операционной системе может потребоваться больше места для хранения индексов. Либо секторы дисков могут задействовать дополнительное место. Кроме того, объем свободного места изменяется динамически. Поэтому не следует ожидать, что вы сможете использовать все заявленное свободное место. Сведения о записи в файловую систему см. в разделе « Чтение и запись файлов ».

Метод StorageVolumeInfo.getStorageVolumes() предоставляет дополнительные сведения о подключенных томах запоминающих устройств (см. раздел « Работа с томами запоминающих устройств »).

Открытие файлов с помощью выбранной по умолчанию системной программы

В AIR 2 можно открыть файл с помощью программы, зарегистрированной в операционной системе для его открытия. Например, приложение AIR может открыть DOC-файл с помощью программы, которая зарегистрирована для его открытия. Используйте метод openWithDefaultApplication() объекта File для открытия файла. Например, следующий код открывает файл test.doc на рабочем столе пользователя с помощью программы, выбранной по умолчанию для файлов DOC:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Примечание. В ОС Linux тип файла MIME (а не расширение) определяет приложение по умолчанию для файла.

Следующий код дает пользователю возможность перейти к mp3-файлу и открыть его в приложении, которое выбрано по умолчанию для воспроизведения mp3-файлов:

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

Метод openWithDefaultApplication() нельзя использовать по отношению к файлам, расположенным в каталоге приложения.

AIR не позволяет применять метод openWithDefaultApplication() для открытия ряда файлов. В Windows AIR запрещает открывать файлы определенных типов (например, EXE или BAT). В ОС Mac OS и Linux среда AIR предотвращает открытие файлов в определенном приложении. (Включая приложения «Терминал» и AppletLauncher в ОС Mac OS и csh, bash или ruby в ОС Linux.) Попытка открыть один из этих файлов с помощью метода openWithDefaultApplication() приводит к появлению исключения. Полный список запрещаемых типов файлов см. в записи справочника по языку для метода File.openWithDefaultApplication() .

Примечание. Это ограничение не существует для приложения AIR, установленного с помощью собственного установщика (расширенное приложение рабочего стола).