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