Работа с каталогами

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

Среда выполнения предоставляет возможности работы с каталогами в локальной файловой системе.

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

Создание каталогов

Метод File.createDirectory() позволяет создать каталог. Например, в приведенном ниже коде создается каталог под названием «AIR Test», являющийся подкаталогом начального каталога пользователя:

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

Если каталог существует, метод createDirectory() не выполняет никаких действий.

В некоторых моделях объект FileStream создает каталоги при открытии файлов. Отсутствующие каталоги создаются при создании экземпляра FileStream со значением параметра fileMode конструктора FileStream() , равным FileMode.APPEND или FileMode.WRITE . Дополнительные сведения см. в разделе « Последовательность действий при чтении и записи файлов ».

Создание временного каталога

Класс File включает метод createTempDirectory() , который создает во временном каталоге System еще один каталог, как показано ниже:

var temp:File = File.createTempDirectory(); 

Метод createTempDirectory() автоматически создает уникальный временный каталог, что избавляет вас от необходимости каждый раз задавать уникальное расположение.

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

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

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

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

Например, в приведенном ниже коде перечислено содержимое каталога документов пользователя (подкаталоги при этом не исследуются):

var directory:File = File.documentsDirectory; 
var contents:Array = directory.getDirectoryListing();  
for (var i:uint = 0; i < contents.length; i++)  
{ 
    trace(contents[i].name, contents[i].size);  
} 

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

var directory:File = File.documentsDirectory; 
directory.getDirectoryListingAsync(); 
directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler); 
 
function dirListHandler(event:FileListEvent):void 
{ 
    var contents:Array = event.files; 
    for (var i:uint = 0; i < contents.length; i++)  
    { 
        trace(contents[i].name, contents[i].size);  
    } 
} 

Копирование и перемещение каталогов

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

var sourceDir:File = File.documentsDirectory.resolvePath("AIR Test"); 
var resultDir:File = File.documentsDirectory.resolvePath("AIR Test Copy"); 
sourceDir.copyTo(resultDir); 

Если задать для параметра overwrite метода copyTo() значение true, все файлы и папки в существующем целевом каталоге будут удалены и замещены файлами и папками исходного каталога (даже если в исходном каталоге нет целевого файла).

Каталог, указанный в качестве параметра newLocation метода copyTo() задает путь к итоговому каталогу. Он не задает родительский каталог, в котором будет содержаться итоговый.

Дополнительные сведения см. в разделе Копирование и перемещение файлов .

Удаление содержимого каталога

Класс File содержит методы deleteDirectory() и deleteDirectoryAsync() . Эти методы служат для удаления каталогов. Первый работает синхронно, второй — асинхронно (см. раздел « Основные сведения о файлах AIR »). Оба метода содержат параметр deleteDirectoryContents (который принимает булево значение). Когда этот параметр равен true (его значение по умолчанию — false ), то при вызове метода удаляются и непустые каталоги, в остальных случаях удаляются только пустые каталоги.

Например, в приведенном ниже коде подкаталог AIR Test синхронно удаляется из каталога документов пользователя:

var directory:File = File.documentsDirectory.resolvePath("AIR Test"); 
directory.deleteDirectory(true); 

В приведенном ниже коде подкаталог AIR Test асинхронно удаляется из каталога документов пользователя:

var directory:File = File.documentsDirectory.resolvePath("AIR Test"); 
directory.addEventListener(Event.COMPLETE, completeHandler) 
directory.deleteDirectoryAsync(true); 
 
function completeHandler(event:Event):void { 
    trace("Deleted.") 
} 

Также присутствуют методы moveToTrash() и moveToTrashAsync() , с помощью которых каталог можно поместить в корзину. Дополнительные сведения см. в разделе « Перемещение файла в корзину ».