Trabalho com objetos File no AIR

Adobe AIR 1.0 e posterior

O objeto File é um ponteiro para um arquivo ou diretório no sistema de arquivos.

A classe File estende a classe FileReference. A classe FileReference, disponível no Adobe® Flash® Player, bem como no AIR, representa um ponteiro para um arquivo, mas a classe File adiciona propriedades e métodos que não são expostos no Flash Player (em um SWF em execução no navegador), devido a considerações sobre segurança.

Sobre a classe File

Você pode usar a classe File para o seguinte:

  • Obter o caminho para diretórios especiais, incluindo o diretório do usuário, o diretório de documentos do usuário, o diretório do qual o aplicativo foi iniciado e o diretório de aplicativo.

  • Cópia de arquivos e diretórios

  • Movimentação de arquivos e diretórios.

  • Exclusão de arquivos e diretórios (ou movimentação para a lixeira)

  • Lista de arquivos e diretórios contidos em um diretório

  • Criação de arquivos e pastas temporários

Depois que o objeto File aponta para um caminho de arquivo, você pode usá-lo para ler e gravar dados de arquivo, usando a classe FileStream.

O objeto File pode apontar para o caminho de um arquivo ou diretório que ainda não existe. Você pode usar esse objeto File na criação de arquivos ou diretórios.

Caminhos de objetos File

Cada objeto File tem duas propriedades que definem cada uma o caminho do objeto:

Propriedade

Descrição

nativePath

Especifica o caminho específico de plataforma para um arquivo. Por exemplo, no Windows o caminho pode ser "c:\Sample directory\test.txt", enquanto no Mac OS pode ser "/Sample directory/test.txt". A propriedade nativePath usa o caractere de barra invertida (\) como o caractere separador de diretório no Windows e o caractere de barra (/) no Mac OS e no Linux.

url

Ela pode usar o esquema URL de arquivo para apontar para um arquivo. Por exemplo, no Windows o caminho pode ser "file:///c:/Sample%20directory/teste.txt", enquanto no Mac OS pode ser "file:///Sample%20directory/teste.txt". O tempo de execução inclui outros esquemas especiais de URL além de file e são descritos em Esquemas URL do AIR com suporte

A classe File inclui propriedades estáticas de indicação de diretórios padrão no Mac OS, no Windows e no Linux. Essas propriedades incluem:

  • File.applicationStorageDirectory — um diretório de armazenamento exclusivo para cada aplicativo do AIR instalado. Este diretório é um lugar apropriado para armazenar ativos dinâmicos do aplicativo e preferências do usuário. Considere o armazenamento de grandes volumes de dados em outro local.

    No Android, o diretório de armazenamento do aplicativo é removido quando o aplicativo é desinstalado ou o usuário opta por limpar os dados do aplicativo, mas isso não ocorre em outras plataformas.

  • File.applicationDirectory – o diretório em que o aplicativo está instalado (junto com quaisquer ativos instalados). Em alguns sistemas operacionais, o aplicativo é armazenado em um único arquivo de pacote e não em um diretório físico. Nesse caso, o conteúdo pode não ficar acessível por meio do caminho nativo. O diretório do aplicativo é somente leitura.

  • File.desktopDirectory – o diretório de área de trabalho do usuário. Se a plataforma não definir um diretório de área de trabalho, será usado outro local no sistema de arquivos.

  • File.documentsDirectory – o diretório de documentos do usuário. Se a plataforma não definir um diretório de documentos, será usado outro local no sistema de arquivo.

  • File.userDirectory – o diretório do usuário. Se a plataforma não definir um diretório do usuário, será usado outro local no sistema de arquivo.

Nota: Quando a plataforma não definir locais padrão para os diretórios de área de trabalho, de documentos ou do usuário, File.documentsDirectory , File.desktopDirectory e File.userDirectory podem fazer referência ao mesmo diretório.

Estas propriedades têm valores diferentes em diferentes sistemas operacionais. Por exemplo, o Mac e o Windows têm caminhos nativos diferentes para o diretório de área de trabalho do usuário. Entretanto, a propriedade File.desktopDirectory aponta para um caminho de diretório apropriado em cada plataforma. Para gravar aplicativos que funcionam bem em várias plataformas, use essas propriedades como base para fazer referência a outros diretórios e arquivos usados pelo aplicativo. Use o método resolvePath() para refinar o caminho. Por exemplo, esse código aponta para o arquivo preferences.xml no diretório de armazenamento do aplicativo:

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

Embora a classe File permita apontar para um caminho específico de arquivo, fazer isso pode levar a aplicativos que não funcionam em várias plataformas. Por exemplo, o caminho C:\Documents and Settings\joe\ só funciona no Windows. Por essas razões, é melhor usar as propriedades estáticas da classe File, como File.documentsDirectory .

Locais de diretórios comuns

Plataforma

Tipo de diretório

Local típico do sistema de arquivos

Android

Aplicativo

/data/data/

Armazenamento do aplicativo

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

Cache

/data/data/applicationID/cache

Área de trabalho

/mnt/sdcard

Documentos

/mnt/sdcard

Temporário

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

Usuário

/mnt/sdcard

iOS

Aplicativo

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

Armazenamento do aplicativo

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

Cache

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

Área de trabalho

não acessível

Documentos

/var/mobile/Applications/uid/Documents

Temporário

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

Usuário

não acessível

Linux

Aplicativo

/opt/filename/share

Armazenamento do aplicativo

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

Área de trabalho

/home/userName/Desktop

Documentos

/home/userName/Documents

Temporário

/tmp/FlashTmp.randomString

Usuário

/home/userName

Mac

Aplicativo

/Applications/filename.app/Contents/Resources

Armazenamento do aplicativo

/Users/ userName /Library/Preferences/ applicationid /Local Store (AIR 3.2 e anterior)

path /Library/Application Support/ applicationid /Local Store (AIR 3.3 e posterior), onde o caminho é /Users/ userName /Library/Containers/ bundle-id /Data (ambiente seguro) ou /Users/userName (ao executar fora de um ambiente seguro)

Cache

/Users/userName/Library/Caches

Área de trabalho

/Users/ userName /Desktop

Documentos

/Users/ userName /Documents

Temporário

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

Usuário

/Users/ userName

Windows

Aplicativo

C:\Arquivos de programa\filename

Armazenamento do aplicativo

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

Cache

C:\Documents and settings\userName\Configurações locais\Temp

Área de trabalho

C:\Documents and settings\userName\Área de trabalho

Documentos

C:\Documents and settings\userName\Meus documentos

Temporário

C:\Documents and settings\userName\Configurações locais\Temp\randomString.tmp

Usuário

C:\Documents and settings\userName

Os caminhos nativos reais desses diretórios variam com base no sistema operacional e na configuração do computador. Os caminhos mostrados nesta tabela são exemplos típicos. Você deve sempre usar as propriedades estáticas apropriadas da classe File para fazer referência a esses diretórios, de modo que o seu aplicativo funcione corretamente em qualquer plataforma. No aplicativo do AIR real, os valores de applicationID e filename mostrados na tabela são obtidos do descritor do aplicativo. Se você especificar uma ID de editor no descritor do aplicativo, a ID de editor será anexada à ID do aplicativo nesses caminhos. O valor de userName é o nome da conta do usuário que faz a instalação.

Como apontar um objeto File para um diretório

Há maneiras diferentes de configurar o objeto File para apontar para um diretório.

Apontar para o diretório inicial do usuário

Você pode apontar o objeto File para o diretório inicial do usuário. O código a seguir configura o objeto File para apontar para o subdiretório AIR Test do diretório inicial:

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

Apontar para o diretório documentos do usuário

Você pode apontar o objeto File para o diretório documentos do usuário. O código a seguir configura o objeto File para apontar para o subdiretório AIR Test do diretório documentos:

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

Apontar para o diretório da área de trabalho

Você pode apontar o objeto File para a área de trabalho. O código a seguir configura o objeto File para apontar para o subdiretório AIR Test da área de trabalho:

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

Apontar para o diretório de armazenamento do aplicativo

Você pode apontar o objeto File para o diretório de armazenamento do aplicativo. Para cada aplicativo do AIR, há um caminho associado exclusivo que define o diretório de armazenamento do aplicativo. Esse diretório é exclusivo de cada aplicativo e usuário. Você pode usar esse diretório para armazenar dados específicos do usuário e do aplicativo (como dados do usuário ou arquivos de preferências). Por exemplo, o código a seguir aponta o objeto File para um arquivo de preferências, prefs.xml, contido no diretório de armazenamento do aplicativo:

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

Normalmente, o local do diretório de armazenamento do aplicativo tem base no nome do usuário e no ID do aplicativo. Os seguintes locais no sistema de arquivos são fornecidos aqui para ajudar a depurar o aplicativo. Você deve sempre usar a propriedade File.applicationStorage ou o esquema de URI app-storage: para resolver arquivos nesse diretório:

  • No Mac OS — varia com a versão do AIR:

    AIR 3.2 e anterior : /Users/nome do usuário/Library/Preferences/ applicationID /Local Store/

    AIR 3.3 e posterior : path /Library/Application Support/ applicationID /Local Store , onde caminho é /Users/ username /Library/Containers/ bundle-id /Data (ambiente seguro) ou /Users/ username (ao executar fora de um ambiente seguro)

    Por exemplo (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • No Windows: no diretório Documents and Settings, em:

    C:\Documents and Settings\user name \Application Data\ applicationID \Local Store\

    Por exemplo:

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

    /home/ user name /.appdata/ applicationID /Local Store/

    Por exemplo:

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • No Android – Em:

    /data/data/ androidPackageID / applicationID/Local Store

    Por exemplo:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Nota: Se um aplicativo possuir um ID de publicação, o ID de publicação também é utilizado como parte do caminho do diretório de armazenamento do aplicativo.

A URL (e a propriedade url ) de um objeto File criado com File.applicationStorageDirectory usa o esquema de URL app-storage (consulte Esquemas URL do AIR com suporte ), como a seguir:

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

Apontar para o diretório do aplicativo

Você pode apontar o objeto File para o diretório em que o aplicativo foi instalado, conhecido como o diretório do aplicativo. Você pode fazer referência a esse diretório, usando a propriedade File.applicationDirectory . Você pode usar esse diretório para examinar o arquivo do descritor do aplicativo ou outros recursos instalados com o aplicativo. Por exemplo, o código a seguir aponta o objeto File para um diretório chamado images no diretório do aplicativo:

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

A URL (e propriedade url ) de um objeto File criado com File.applicationDirectory usa o esquema de URL app (consulte Esquemas URL do AIR com suporte ), como a seguir:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Nota: No Android, os arquivos no pacote de aplicativos não ficam acessíveis pelo nativePath . A propriedade nativePath é uma string vazia. Use sempre o URL para acessar arquivos no diretório do aplicativo em vez de usar um caminho nativo.

Apontar para o diretório do cache

Você pode apontar um objeto File para o diretório de cache ou temporário do sistema operacional utilizando a propriedade File.cacheDirectory . Trata-se de um diretório que contém arquivos temporários que não são necessários para que o aplicativo funcione e não causarão problemas ou perda de dados para o usuário caso sejam excluídos.

Na maioria dos sistemas operacionais, o diretório de cache é um diretório temporário. No iOS, o diretório de cache corresponde ao diretório de caches da biblioteca de aplicativos. Os arquivos neste diretório não são copiados para o armazenamento online, podendo ser excluídos pelo sistema operacional se o espaço de armazenamento disponível do dispositivo não for suficiente. Para obter mais informações, consulte Controle do backup de arquivos e do armazenamento em cache .

Apontando para a raiz do sistema de arquivos

O método File.getRootDirectories() lista todos os volumes de raiz, como C: e volumes montados em um computador Windows. No Mac OS e no Linux, esse método sempre retorna o diretório raiz exclusivo do computador (o diretório "/"). O método StorageVolumeInfo.getStorageVolumes() fornece informações mais detalhadas sobre os volumes montados de armazenamento (consulte Trabalho com volumes de armazenamento ).

Nota: A raiz do sistema de arquivos não é legível no Android. Um objeto File que faz referência ao diretório com o caminho nativo “/” é retornado, mas as propriedades do objeto não têm valores precisos. Por exemplo, spaceAvailable é sempre 0.

Como apontar para um diretório explícito

Você pode apontar o objeto File para um diretório explícito, definindo a propriedade nativePath do objeto File, conforme o seguinte exemplo (no Windows):

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

Importante: apontar para um caminho explícito dessa forma pode levar a um código que não funciona em várias plataformas. Por exemplo, o exemplo anterior só funciona no Windows. Você pode usar as propriedades estáticas do objeto File, como File.applicationStorageDirectory , para localizar um diretório que funciona em várias plataformas. Use o método resolvePath() (consulte a próxima seção) para ir até um caminho relativo.

Navegação para caminhos relativos

Você pode usar o método resolvePath() para obter um caminho relativo a outro caminho determinado. Por exemplo, o código a seguir configura o objeto File para apontar para o subdiretório "AIR Test" do diretório inicial do usuário:

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

Você também pode usar a propriedade url do objeto File para apontar para um diretório com base em uma sequência de URL, conforme segue:

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

Para obter mais informações, consulte Modificação de caminhos do File .

Permissão para que o usuário navegue para selecionar um diretório

A classe File inclui o método browseForDirectory() , que apresenta uma caixa de diálogo de sistema na qual o usuário pode selecionar um diretório para atribuir ao objeto. O método browseForDirectory() é assíncrono. O objeto File despachará um evento select se o usuário selecionar um diretório e clicar no botão Abrir ou despachará um evento cancel se o usuário clicar no botão Cancelar.

Por exemplo, o código a seguir permite que o usuário selecione um diretório e fornece o caminho do diretório na seleção:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Nota: No Android, não há suporte para o método browseForDirectory() . Chamar esse método não tem nenhum efeito. Um evento cancel é despachado imediatamente. Em vez disso, para permitir que os usuários selecionem um diretório, é preciso usar uma caixa de diálogo personalizada definida pelo aplicativo.

Como apontar para o diretório do qual o aplicativo foi chamado

Você pode obter a localização do diretório do qual o aplicativo foi chamado, marcando a propriedade currentDirectory do objeto InvokeEvent despachada quando o aplicativo é chamado. Para obter detalhes, consulte Captura de argumentos de linha de comando .

Como apontar um objeto File para um arquivo

Há maneiras diferentes de definir o arquivo para o qual o objeto File aponta.

Apontar para um caminho de arquivo explícito

Importante: apontar para um caminho explícito pode levar a um código que não funciona em várias plataformas. Por exemplo, o caminho C:/foo.txt só funciona no Windows. Você pode usar as propriedades estáticas do objeto File, como File.applicationStorageDirectory , para localizar um diretório que funciona em várias plataformas. Use o método resolvePath() (consulte Modificação de caminhos do File para ir até um caminho relativo.

Você pode usar a propriedade url do objeto File para apontá-lo para um arquivo ou diretório com base em uma sequência de URL, conforme segue:

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

Você também pode passar a URL para a função de construtor File() , como no seguinte:

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

A propriedade url sempre retorna a versão codificada de URI da URL (por exemplo, espaços em branco são substituídos por "%20 ):

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

Você também pode usar a propriedade nativePath do objeto File para definir um caminho explícito. Por exemplo, o código a seguir, quando executado em um computador com o Windows, define um objeto File para o arquivo test.txt no subdiretório AIR Test da unidade C:

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

Você também pode passar esse caminho para a função de construtor File() , como no seguinte:

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

Use o caractere barra (/) como o delimitador de caminho para a propriedade nativePath . No Windows, você também pode usar o caractere de barra invertida (\), mas fazer isso leva a aplicativos que não funcionam em várias plataformas.

Para obter mais informações, consulte Modificação de caminhos do File .

Enumeração de arquivos em um diretório

Você pode usar o método getDirectoryListing() do objeto File para obter uma matriz de objetos File apontando para arquivos e subdiretórios no nível raiz de um diretório. Para obter mais informações, consulte Enumeração de diretórios .

Permissão para que o usuário navegue para selecionar um arquivo

A classe File inclui os seguintes métodos que apresentam uma caixa de diálogo de sistema na qual o usuário pode selecionar um arquivo para atribuir ao objeto:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Cada um desses métodos é assíncrono. Os métodos browseForOpen() e browseForSave() despacham o evento select quando o usuário seleciona um arquivo (ou caminho de destino, no caso de browseForSave()). Com os métodos browseForOpen() e browseForSave() , na seleção, o objeto File de destino aponta para os arquivos selecionados. O método browseForOpenMultiple () despacha um evento selectMultiple quando o usuário seleciona arquivos. O evento selectMultiple é do tipo FileListEvent, que tem a propriedade files , que é uma matriz de objetos File (apontando para os arquivos selecionados).

Por exemplo, o código a seguir apresenta para o usuário a caixa de diálogo "Abrir", na qual é possível selecionar um arquivo:

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

Se o aplicativo tiver outra caixa de diálogo de navegação aberta quando você chamar o método de navegação, o tempo de execução emitirá uma exceção Erro.

Nota: No Android, somente arquivos de imagem, vídeo e áudio podem ser selecionados com os métodos browseForOpen() e browseForOpenMultiple() . A caixa de diálogo browseForSave() também exibe somente arquivos de mídia, embora o usuário possa digitar um nome de arquivo arbitrariamente. Para abrir e salvar arquivos que não sejam de mídia, considere o uso de caixas de diálogo personalizadas em vez desses métodos.

Modificação de caminhos do File

Você também pode modificar o caminho de um objeto File existente, chamando o método resolvePath() ou modificando a propriedade nativePath ou url do objeto, conforme nos exemplos a seguir (no 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 

Ao usar a propriedade nativePath , use o caractere de barra invertida (/) como caractere de separação de diretório. No Windows, você também pode usar o caractere de barra invertida (\), mas você não deve fazer isso, pois ele leva a um código que não funciona em várias plataformas.

Esquemas URL do AIR com suporte

No AIR, você pode usar qualquer um dos seguintes esquemas URL na definição da propriedade url de um objeto File:

esquema de URL

Descrição

arquivo

Use para especificar um caminho relativo à raiz do sistema de arquivos. Por exemplo:

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

A URL padrão especifica se a URL de arquivo usa a forma file://<host>/<path> . Como um caso especial, <host> pode ser a string vazia, que é interpretada como "a máquina a partir da qual a URL está sendo interpretada." Por essa razão, as URLs de arquivo normalmente têm três barras (///).

app

Use para especificar um caminho relativo ao diretório raiz do aplicativo instalado (o diretório que contém o arquivo application.xml do aplicativo instalado). Por exemplo, o caminho a seguir aponta para um subdiretório de imagens do diretório do aplicativo instalado:

app:/images

app-storage

Use para especificar um caminho relativo ao diretório de armazenamento do aplicativo. Para cada aplicativo instalado, o AIR define um diretório exclusivo de armazenamento do aplicativo, que é um local útil para armazenar dados específicos desse aplicativo. Por exemplo, o caminho a seguir aponta para o arquivo prefs.xml em um subdiretório de configurações do diretório de armazenamento do aplicativo:

app-storage:/settings/prefs.xml

Controle do backup de arquivos e do armazenamento em cache

Determinados sistemas operacionais, sobretudo o iOS e o Mac OS X, oferecem aos usuários a capacidade de fazer backup de arquivos de aplicativo automaticamente para um armazenamento remoto. Além disso, há restrições no iOS no que diz respeito à possibilidade de os arquivos serem copiados ou não e ao local em que arquivos de diferentes propósitos podem ser armazenados.

A seção a seguir resume como cumprir as diretrizes da Apple para backup e armazenamento de arquivos. Para obter mais informações, consulte as próximas seções.

  • Para determinar se um arquivo não precisa de backup e (somente para iOS) pode ser excluído pelo sistema operacional caso o espaço de armazenamento do dispositivo seja insuficiente, salve o arquivo no diretório do cache ( File.cacheDirectory ). Esse é o local de armazenamento preferencial no iOS e deve ser utilizado para a maioria dos arquivos que podem ser restaurados ou baixados novamente.

  • Para determinar que um arquivo, embora não precise de backup, não deve ser excluído pelo sistema operacional, salve o arquivo em um dos diretórios da biblioteca de aplicativos, como o diretório de armazenamento de aplicativos ( File.applicationStorageDirectory ) ou o diretório de documentos ( File.documentsDirectory ). Defina a propriedade preventBackup do objeto File como true . Trata-se de uma exigência da Apple para conteúdos que possam ser restaurados ou novamente baixados, mas que constituem um requisito para o funcionamento adequado de seu aplicativo durante o uso offline.

Especificação de arquivos para backup

Com o objetivo de economizar o espaço de backup e diminuir o uso da largura de banda da rede, as diretrizes da Apple para aplicativos Mac e iOS determinam que somente arquivos que contenham dados inseridos por usuários ou dados que não possam ser restaurados ou baixados novamente devem ser destinados a backup.

Por padrão, todos os arquivos nas pastas da biblioteca de aplicativos recebem backup. No Mac OS X, trata-se do diretório de armazenamento de aplicativos. No iOS, isso inclui o diretório de armazenamento de aplicativos, o diretório de aplicativos, o diretório do desktop, o diretório de documentos e o diretório do usuário (visto que esses diretórios são mapeados para as pastas da biblioteca do aplicativo no iOS). Por conseguinte, todos os arquivos nestes diretórios são copiados para o armazenamento do servidor por padrão.

Se você estiver salvando um arquivo em um desses locais que possam ser recriados por seu aplicativo, deverá sinalizá-lo de modo que o sistema operacional saiba que não deverá fazer backup dele. Para indicar que o backup de um arquivo não deve ser feito, defina a propriedade preventBackup do objeto File como true .

Observe que no iOS, ao se tratar de um arquivo em qualquer pasta da biblioteca de aplicativos, mesmo se a propriedade preventBackup do arquivo estiver definida como true , o arquivo é sinalizado como um arquivo permanente que não deve ser excluído pelo sistema operacional.

Controle da exclusão e do armazenamento em cache do arquivo

As diretrizes da Apple para aplicativos iOS determina que, sempre que possível, o conteúdo que pode ser restaurado deve ser disponibilizado para ser excluído pelo sistema operacional caso não haja espaço de armazenamento suficiente no dispositivo.

No iOS, os arquivos nas pastas da biblioteca de aplicativos (como o diretório de armazenamento de aplicativos ou o diretório de documentos) são sinalizados como permanentes e não são excluídos pelo sistema operacional.

Salve os arquivos que possam ser restaurados pelo aplicativo e que não causarão problemas caso sejam excluídos em caso de espaço de armazenamento insuficiente no diretório do cache do aplicativo. Você poderá acessar o diretório do cache por meio da propriedade estática File.cacheDirectory .

No iOS, o diretório do cache corresponde ao diretório do cache do aplicativo (<Application Home>/Library/Caches). Em outros sistemas operacionais, esse diretório é mapeado para um diretório similar. Por exemplo, no Mac OS X, ele também mapeia para o diretório Caches na biblioteca de aplicativos. No Android, o diretório do cache mapeia para o diretório do cache do aplicativo. No Windows, o diretório do cache mapeia o diretório temporário do sistema operacional. Tanto no Android como no Windows, trata-se do mesmo diretório que é acessado por uma chamada para os métodos createTempDirectory() e createTempFile() da classe File.

Localização do caminho relativo entre dois arquivos

Você pode usar o método getRelativePath() para localizar o caminho relativo entre dois arquivos:

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 

O segundo parâmetro do método getRelativePath() , o parâmetro useDotDot , permite que a sintaxe .... seja retornada nos resultados, para indicar diretórios pai:

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 

Obtenção de versões canônicas de nomes de arquivo

No Windows e no Mac OS, os nomes e caminhos de arquivo não fazem distinção entre letras maiúsculas e minúsculas. No exemplo a seguir, dois objetos File apontam para o mesmo arquivo:

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

No entanto, nomes de documentos e de diretórios incluem o uso de maiúsculas e minúsculas. Por exemplo, o seguinte assume que há uma pasta com nome AIR Test no diretório de documentos, como nos exemplos a seguir:

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

O método canonicalize() converte o objeto nativePath para usar maiúsculas e minúsculas corretas para o nome de arquivo ou de diretório. Em sistemas de arquivo que fazem distinção entre maiúsculas e minúsculas (como Linux), quando vários arquivos possuem nomes cuja distinção é somente a letra maiúscula ou minúscula, o método canonicalize() ajusta o caminho para que corresponda ao primeiro arquivo encontrado (em uma ordem determinada pelo sistema de arquivos).

Você também pode usar o método canonicalize() para converter nomes de arquivos pequenos (nomes "8,3") em nomes de arquivos longos do Windows, como nos exemplos seguintes:

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

Trabalho com pacotes e links simbólicos

Vários sistemas operacionais oferecem suporte a arquivos de pacote e arquivos de link simbólico:

Pacotes – No Mac OS, os diretórios podem ser designados como pacotes e mostrados no Finder do Mac OS como um arquivo único, em vez de um diretório.

Links simbólicos — O Mac OS, o Linux e o Windows Vista oferecem suporte a links simbólicos. Os links simbólicos permitem que um arquivo aponte para outro arquivo ou diretório no disco. Embora semelhantes, os links simbólicos não são o mesmo que alias. O alias é sempre reportado como arquivo (em vez de diretório), e ler ou gravar em um alias ou atalho nunca afeta o diretório ou arquivo original para o qual ele aponta. Por outro lado, o link simbólico se comporta exatamente como o arquivo ou diretório para o qual aponta. Ele pode ser reportado como um arquivo ou diretório, e ler ou gravar em um link simbólico afetará o arquivo ou diretório para o qual ele aponta, não o link simbólico propriamente dito. Além disso, no Windows, a propriedade isSymbolicLink de um objeto File que faça referência a um ponto de junção (usado no sistema de arquivos NTFS) é definida como true .

A classe File inclui as propriedades isPackage e isSymbolicLink para verificar se o objeto File faz referência a um pacote ou link simbólico.

O código a seguir percorre o diretório da área de trabalho do usuário, listando subdiretórios que não sejam pacotes:

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

O código a seguir percorre o diretório da área de trabalho do usuário, listando arquivos e diretórios que não sejam links simbólicos:

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

O método canonicalize() altera o caminho do link simbólico para apontar para o arquivo ou diretório ao qual o link se refere. O código a seguir percorre o diretório da área de trabalho do usuário e relata os caminhos referenciados pelos arquivos que sejam links simbólicos:

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

Determinação de espaço disponível em um volume

A propriedade spaceAvailable do objeto File é o espaço disponível para uso no local do File, em bytes. Por exemplo, o código a seguir verifica o espaço disponível no diretório de armazenamento do aplicativo:

trace(File.applicationStorageDirectory.spaceAvailable); 

Se o objeto File fizer referência a um diretório, a propriedade spaceAvailable indicará o espaço no diretório que os arquivos podem usar. Se o objeto File fizer referência a um arquivo, a propriedade spaceAvailable indicará o espaço no qual o arquivo poderá crescer. Se o local do arquivo não existir, a propriedade spaceAvailable será definida como 0. Se o objeto File fizer referência a um link simbólico, a propriedade spaceAvailable será definida como espaço disponível no local para o qual o link simbólico aponta.

Geralmente o espaço disponível para um diretório ou arquivo é igual ao espaço disponível no volume que contém o diretório ou o arquivo. No entanto, o espaço disponível pode levar em conta limites por cotas e por diretório.

A adição de um arquivo ou diretório a um volume geralmente requer mais espaço que o tamanho real do arquivo ou o tamanho do conteúdo do diretório. Por exemplo, o sistema operacional pode exigir mais espaço para armazenar informações sobre índice. Ou os setores de disco necessários podem usar espaço adicional. Além disso, o espaço disponível muda dinamicamente. Dessa forma, você não poderá alocar todo o espaço informado para o armazenamento de arquivos. Para obter informações sobre como gravar no sistema de arquivos, consulte Leitura e gravação de arquivos .

O método StorageVolumeInfo.getStorageVolumes() fornece informações mais detalhadas sobre os volumes montados de armazenamento (consulte Trabalho com volumes de armazenamento ).

Abertura de arquivos com o aplicativo padrão do sistema

No AIR 2, você pode abrir um arquivo usando o aplicativo registrado pelo sistema operacional para abri-lo. Por exemplo, um aplicativo do AIR pode abrir um arquivo DOC com o aplicativo registrado para abri-lo. Utilize o método openWithDefaultApplication() de um objeto File para abrir o arquivo. Por exemplo, o código a seguir abre um arquivo chamado test.doc no computador do usuário e abre-o com o aplicativo padrão para os arquivos DOC:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Nota: No Linux, o tipo MIME do arquivo, não a extensão do nome de arquivo, determina o aplicativo padrão para um arquivo.

O código a seguir permite que o usuário navegue até um arquivo mp3 e abra-o no aplicativo padrão para reproduzir arquivos 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(); 
}

Você não pode usar o método openWithDefaultApplication() com arquivos localizados no diretório do aplicativo.

O AIR impede que você use o método openWithDefaultApplication() para abrir certos arquivos. No Windows, o AIR impede que você abra os arquivos que têm certos tipos de arquivos, como EXE ou BAT. No Mac OS, o AIR impede que você abra arquivos que serão lançados em certos aplicativos. (Incluindo Terminal e AppletLauncher no Mac OS, e csh, bash ou ruby no Linux). Tentar abrir um desses arquivos que usam o método openWithDefaultApplication() resulta em uma exceção. Para ver uma lista completa dos tipos de arquivo impedidos, consulte a entrada de referência de linguagem para o método File.openWithDefaultApplication() .

Nota: Essa limitação não existe para um aplicativo do AIR instalado com um instalador nativo (um aplicativo de desktop expandido).