Trabajo con objetos File en AIR

Adobe AIR 1.0 y posterior

Un objeto File es un puntero a un archivo o directorio del sistema de archivos.

La clase File amplía la clase FileReference. La clase FileReference, que está disponible en Adobe® Flash® Player además de en AIR, representa un puntero a un archivo. La clase File añade propiedades y métodos que no se exponen en Flash Player (en un archivo SWF que se ejecuta en un navegador) por motivos de seguridad.

Clase File

La clase File se emplea para lo siguiente:

  • obtener la ruta a directorios especiales, entre ellos el directorio del usuario, el directorio de documentos del usuario, el directorio desde el cual se inició la aplicación, y el directorio de la aplicación;

  • copiar archivos y directorios;

  • mover archivos y directorios;

  • eliminar archivos y directorios (o pasarlos a la papelera);

  • enumerar los archivos y directorios que contiene un directorio;

  • crear archivos y directorios temporales.

Una vez que un objeto File apunta a una ruta de archivo, se puede utilizar para leer y escribir datos de archivo usando la clase FileStream.

Un objeto File puede apuntar a la ruta de un archivo o directorio que aún no existe. Puede utilizarse un objeto File de este tipo al crear un archivo o directorio.

Rutas a objetos File

Cada objeto File tiene dos propiedades que definen su ruta:

Propiedad

Descripción

nativePath

Especifica la ruta a un archivo en una plataforma determinada. Por ejemplo, una ruta en Windows podría ser "c:\Directorio de muestras\test.txt" mientras que en Mac OS sería "/Directorio de muestras/test.txt". En Windows, una propiedad nativePath utiliza la barra diagonal inversa (\) como carácter separador de directorios, mientras que en Mac OS y Linux utilizan la barra diagonal (/).

url

Esto puede utilizar el esquema de URL de archivo para apuntar a un archivo. Por ejemplo, una ruta en Windows podría ser "file:///c:/Directorio%20de%20muestras/test.txt" mientras que en Mac OS sería "file:///Directorio%20de%20muestras/test.txt". El motor de ejecución incluye otros esquemas de URL especiales además de file que se describen en Esquemas de URL compatibles de AIR .

La clase File incluye propiedades estáticas para señalar a directorios estándar tanto en Mac OS, Windows y Linux. Entre estas propiedades se incluyen:

  • File.applicationStorageDirectory : directorio de almacenamiento exclusivo para cada aplicación de AIR instalada.. Este directorio es un lugar adecuado para almacenar preferencias de usuario y recursos de la aplicación dinámicos. Considere en almacenamiento de grandes cantidades de datos en otro lugar.

    En Android e iOS, el directorio de almacenamiento de la aplicación se elimina cuando la aplicación se desinstala o el usuario opta por borrar los datos de la aplicación, pero este no es el caso en otras plataformas.

  • File.applicationDirectory ; directorio donde se instala la aplicación (junto con cualquier activo instalado). En algunos sistemas operativos, la aplicación se almacena en un solo archivo de paquete en lugar de en un directorio físico. En este caso, es posible que no se pueda acceder al contenido utilizando la ruta nativa. El directorio de la aplicación es de solo lectura.

  • File.desktopDirectory : directorio del escritorio del usuario. Si una plataforma no define un directorio de escritorio, se utiliza otra ubicación del sistema de archivos.

  • File.documentsDirectory : directorio de documentos del usuario. Si una plataforma no define un directorio de documentos, se utiliza otra ubicación del sistema de archivos.

  • File.userDirectory : el directorio del usuario. Si una plataforma no define un directorio de usuario, se utiliza otra ubicación del sistema de archivos.

Nota: si una plataforma no define ubicaciones estándar para los directorios de usuario, documentos o escritorio, File.documentsDirectory , File.desktopDirectory y File.userDirectory pueden hacer referencia al mismo directorio.

Estas propiedades tienen valores diferentes en los distintos sistemas operativos. Por ejemplo, Mac y Windows cuentan con rutas nativas distintas en el directorio del escritorio del usuario. Sin embargo, la propiedad File.desktopDirectory señala a una ruta de directorio adecuada en todas las plataformas. Para escribir aplicaciones que funcionen bien en distintas plataformas, utilice estas propiedades como base para hacer referencia a otros directorios y archivos utilizados por la aplicación. Utilice el método resolvePath() para mejorar la ruta. Por ejemplo, el siguiente código señala al archivo preferences.xml en el directorio de almacenamiento de la aplicación:

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

Aunque la clase File permite señalar a una ruta de archivo específica, esto puede implicar que las aplicaciones no funcionen en distintas plataformas. Por ejemplo, la ruta C:\Documents and Settings\joe\ solo funciona en Windows. Por estos motivos, es mejor utilizar las propiedades estáticas de la clase File como, por ejemplo, File.documentsDirectory .

Ubicaciones de directorio comunes

Plataforma

Tipo de directorio

Ubicación típica del sistema de archivos

Android

Aplicación

/data/data/

Almacenamiento de la aplicación

/data/data/air.applicationID/nombredearchivo/Local Store

Caché

/data/data/applicationID/cache

Escritorio

/mnt/sdcard

Documentos

/mnt/sdcard

Temporal

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

Usuario

/mnt/sdcard

iOS

Aplicación

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

Almacenamiento de la aplicación

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

Caché

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

Escritorio

no accesible

Documentos

/var/mobile/Applications/uid/Documents

Temporal

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

Usuario

no accesible

Linux

Aplicación

/opt/filename/share

Almacenamiento de la aplicación

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

Escritorio

/home/userName/Desktop

Documentos

/home/userName/Documents

Temporal

/tmp/FlashTmp.randomString

Usuario

/home/userName

Mac

Aplicación

/Applications/filename.app/Contents/Resources

Almacenamiento de la aplicación

/Users/ userName /Library/Preferences/ applicationid /Local Store (AIR 3.2 y versiones anteriores)

ruta de acceso /Library/Application Support/ applicationid /Local Store (AIR 3.3 y versiones posteriores), donde la ruta es /Users/ userName /Library/Containers/ bundle-id /Data (dentro de entorno limitado de seguridad) o /Users/userName (fuera de entorno limitado de seguridad)

Caché

/Users/Nombre de usuario/Library/Caches

Escritorio

/Users/ userName /Desktop

Documentos

/Users/ userName /Documents

Temporal

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

Usuario

/Users/ userName

Windows

Aplicación

C:\Program Files\filename

Almacenamiento de la aplicación

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

Caché

C:\Documents and settings\nombredeusuario\Configuración local\Temp

Escritorio

C:\Documents and settings\userName\Desktop

Documentos

C:\Documents and settings\userName\My Documents

Temporal

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

Usuario

C:\Documents and settings\userName

Las rutas nativas reales para estos directorios varían en función del sistema operativo y la configuración del equipo. Las rutas que se muestran en esta tabla representan ejemplos típicos. Siempre se deben utilizar las propiedades estáticas adecuadas de la clase File para hacer referencia a estos directorios de forma que la aplicación funcione correctamente en cualquier plataforma. En una aplicación real de AIR, los valores para applicationID y filename mostrados en la tabla proceden del descriptor de la aplicación. Si se especifica un ID de editor en el descriptor de la aplicación, este ID se añade al ID de la aplicación en estas rutas. El valor de userName es el nombre de la cuenta del usuario que realiza la instalación.

Configuración de un objeto File para que apunte a un directorio

Existen distintas formas de configurar un objeto File para que apunte a un directorio.

Apuntar al directorio de inicio del usuario

Un objeto File puede apuntar al directorio de inicio del usuario. El siguiente código configura un objeto File para que apunte a un subdirectorio AIR Test del directorio de inicio:

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

Apuntar al directorio de documentos del usuario

Un objeto File puede apuntar al directorio de documentos del usuario. El siguiente código configura un objeto File para que apunte a un subdirectorio AIR Test del directorio de documentos:

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

Apuntar al directorio del escritorio

Un objeto File puede apuntar al escritorio. El siguiente código configura un objeto File para que apunte a un subdirectorio AIR Test del escritorio:

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

Apuntar al directorio de almacenamiento de la aplicación

Un objeto File puede apuntar al directorio de almacenamiento de la aplicación. Para cada aplicación de AIR hay una ruta asociada exclusiva que define el directorio de almacenamiento de la aplicación. Este directorio es exclusivo para cada aplicación y usuario. Se puede utilizar este directorio para guardar datos que son específicos del usuario y la aplicación (como los archivos de datos de usuario o de preferencias). Por ejemplo, el siguiente código configura un objeto File para que apunte a un archivo de preferencias, prefs.xml, que se encuentra en el directorio de almacenamiento de la aplicación:

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

La ubicación del directorio de almacenamiento de la aplicación se suele basar en el nombre de usuario y el ID de la aplicación. Las siguientes ubicaciones del sistema de archivos se incluyen aquí para ayudar a depurar la aplicación. Siempre se debe usar la propiedad File.applicationStorage o app-storage: esquema de URI para resolver archivos en este directorio:

  • En Mac OS: varía según la versión de AIR.

    AIR 3.2 y versiones anteriores : /Users/nombre de usuario/Library/Preferences/ applicationID /Local Store/

    AIR 3.3 y versiones posteriores : ruta de acceso /Library/Application Support/ applicationID /Local Store , donde ruta de acceso es /Users/ username /Library/Containers/ bundle-id /Data (dentro de entorno limitado de seguridad) o /Users/ username (fuera de entorno limitado de seguridad)

    Por ejemplo (AIR 3.2):

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • En Windows, en el directorio Documents and Settings en:

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

    Por ejemplo:

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

    /home/ nombre de usuario /.appdata/ applicationID /Local Store/

    Por ejemplo:

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

    /data/data/ androidPackageID / applicationID/Local Store

    Por ejemplo:

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
Nota: si una aplicación dispone de ID de edición, este también se utiliza como parte de la ruta al directorio de almacenamiento de la aplicación.

La URL (y la propiedad url ) para un objeto File creado con File.applicationStorageDirectory utiliza el esquema de URL app-storage (consulte Esquemas de URL compatibles de AIR ), como en el ejemplo siguiente:

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

Apuntar al directorio de la aplicación

Un objeto File puede apuntar al directorio en el que se instaló la aplicación, al que se describe como directorio de la aplicación. Para ello se utiliza propiedad File.applicationDirectory . Este directorio puede utilizarse para examinar el archivo descriptor de la aplicación u otros recursos que haya instalados con la aplicación. Por ejemplo, el siguiente código configura un objeto File para que apunte a un directorio llamado images que se encuentra en el directorio de la aplicación:

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

La URL (y la propiedad url ) para un objeto File creado con File.applicationDirectory utiliza el esquema de URL app-storage (consulte Esquemas de URL compatibles de AIR ), como en el ejemplo siguiente:

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
Nota: en Android, no se puede acceder a los archivos del paquete de la aplicación a través de nativePath . La propiedad nativePath es una cadena vacía. Utilice siempre la dirección URL para acceder a los archivos en el directorio de la aplicación en lugar de una ruta nativa.

Apuntar al directorio de memoria caché

Puede hacer que un objeto File apunte temporalmente al sistema operativo o al directorio de memoria caché mediante la propiedad File.cacheDirectory . Este directorio contiene archivos temporales que no son esenciales para ejecutar la aplicación, por lo que no causarán problemas ni pérdida de datos para el usuario si se eliminan.

En la mayoría de sistemas operativos, el directorio de memoria caché es temporal. En iOS, este directorio corresponde al directorio Caches de la biblioteca de aplicación. Si el espacio de almacenamiento disponible en el dispositivo es escaso, el sistema operativo podría eliminar los archivos de este directorio, de los que no se hacen copias de seguridad en el espacio de almacenamiento en línea. Para obtener más información, consulte Control de copias de seguridad y almacenamiento en caché .

Apuntar a la raíz del sistema de archivos

El método File.getRootDirectories() enumera todos los volúmenes raíz -como C: y los volúmenes montados- de un ordenador con Windows. En Mac OS y Linux, este método siempre produce como resultado el directorio raíz exclusivo del ordenador (el directorio "/"). El método StorageVolumeInfo.getStorageVolumes() proporciona más información detallada sobre los volúmenes de almacenamiento montados (consulte Trabajo con volúmenes de almacenamiento ).

Nota: la raíz del sistema de archivos no se puede leer en Android. Se devuelve un objeto File que hace referencia al directorio con la ruta nativa, “/”, pero las propiedades de ese objeto no tienen valores precisos. Por ejemplo, spaceAvailable siempre es 0.

Apuntar a un directorio explícito

Para que un objeto File apunte a un directorio explícito, se configura la propiedad nativePath del objeto File, como en el ejemplo siguiente (en Windows):

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

Importante: señalar a una ruta explícita de este modo puede implicar que el código no funcione en distintas plataformas. Por ejemplo, el ejemplo anterior solo funciona en Windows. Se pueden utilizar las propiedades estáticas del objeto File como, por ejemplo, File.applicationStorageDirectory , para localizar un directorio que funcione en varias plataformas. Utilice el método resolvePath() (consulte la sección siguiente) para buscar una ruta relativa.

Desplazarse a rutas relativas

El método resolvePath() sirve para obtener una ruta relativa a otra ruta determinada. En el ejemplo siguiente, el código configura un objeto File para que apunte a un subdirectorio "AIR Test" del directorio de inicio del usuario:

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

También se puede utilizar la propiedad url de un objeto File para que apunte a un directorio con base en una cadena URL, como en el ejemplo siguiente:

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

Para ver más información, consulte Modificación de rutas de archivos .

Dejar que el usuario utilice la función Examinar para seleccionar un directorio

La clase File incluye el método browseForDirectory() , que presenta un cuadro de diálogo del sistema que permite al usuario seleccionar un directorio para asignarlo al objeto. El método browseForDirectory() es asíncrono. El objeto File distribuye un evento select si el usuario selecciona un directorio y hace clic en el botón Abrir, o distribuye un evento cancel si el usuario hace clic en el botón Cancelar.

Por ejemplo, con el siguiente código el usuario puede seleccionar un directorio y se produce una ruta a ese directorio al seleccionarlo:

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
Nota: en Android, no se admite el método browseForDirectory() . La llamada a este método no tiene efecto; un evento cancel se distribuye de forma inmediata. Para que los usuarios puedan seleccionar un directorio, utilice un cuadro de diálogo personalizado y definido por la aplicación.

Apuntar al directorio desde el que se invocó la aplicación

La ubicación del directorio desde el cual se invoca una aplicación puede obtenerse comprobando la propiedad currentDirectory del objeto InvokeEvent que se distribuye al invocar la aplicación. Para obtener más información, consulte Captura de argumentos de la línea de comandos .

Configuración de un objeto File para que apunte a un archivo

Existen distintas formas de configurar el archivo al que apunta un objeto File.

Apuntar a una ruta de archivo explícita

Importante: señalar a una ruta explícita puede implicar que el código no funcione en distintas plataformas. Por ejemplo, la ruta C:/foo.txt solo funciona en Windows. Se pueden utilizar las propiedades estáticas del objeto File como, por ejemplo, File.applicationStorageDirectory , para localizar un directorio que funcione en varias plataformas. Utilice el método resolvePath() (consulte Modificación de rutas de archivos ) para buscar una ruta relativa.

Se puede utilizar la propiedad url de un objeto File para que apunte a un archivo o un directorio con base en una cadena URL, como en el ejemplo siguiente:

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

También se puede pasar la URL a la función constructora File() , como en el ejemplo siguiente:

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

La propiedad url siempre produce la versión codificada en formato URI de la URL (por ejemplo, los espacios en blanco se sustituyen con "%20" ):

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

Se puede utilizar también la propiedad nativePath de un objeto File para definir una ruta explícita. Por ejemplo, cuando se ejecuta en un ordenador con Windows, el código que aparece a continuación configura un objeto File para que apunte al archivo test.txt en el subdirectorio AIR Test de la unidad C:.

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

También se puede pasar esta ruta a la función constructora File() , como en el ejemplo siguiente:

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

Utilice el carácter de barra diagonal (/) como delimitador para la propiedad nativePath . En Windows, también puede utilizar el carácter de barra diagonal inversa (\), pero esto implica que las aplicaciones no funcionen en distintas plataformas.

Para ver más información, consulte Modificación de rutas de archivos .

Enumeración de los archivos de un directorio

El método getDirectoryListing() de un objeto File sirve para obtener un conjunto de objetos File que apuntan a archivos y subdirectorios en el nivel raíz de un directorio. Para obtener más información, consulte Enumeración de directorios .

Dejar que el usuario utilice la función Examinar para seleccionar un archivo

La clase File incluye los siguientes métodos que presentan un cuadro de diálogo del sistema que permite al usuario seleccionar un archivo para asignarlo al objeto:

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

Todos estos métodos son asíncronos. Los métodos browseForOpen() y browseForSave() distribuyen el evento "select" cuando el usuario selecciona un archivo (o una ruta de destino, en el caso de browseForSave()). Con los métodos browseForOpen() y browseForSave() , al seleccionarlo el objeto File de destino apunta a los archivos seleccionados. El método browseForOpenMultiple () distribuye un evento selectMultiple cuando el usuario selecciona varios archivos. El evento selectMultiple es del tipo FileListEvent, el cual tiene una propiedad files que es un conjunto de objetos File (que apuntan a los archivos seleccionados).

Por ejemplo, el siguiente código presenta al usuario un cuadro de diálogo “Abrir” que le permite seleccionar un archivo:

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

Si en la aplicación ya estaba abierto otro cuadro de diálogo con la función examinar cuando se llama a un método de examinar, el motor de ejecución emite una excepción de Error.

Nota: en Android, solo se pueden seleccionar los archivos de audio, vídeo e imagen con los métodos browseForOpen() y browseForOpenMultiple() . El cuadro de diálogo browseForSave() también muestra únicamente los archivos de medios aunque el usuario pueda introducir un nombre de archivo arbitrario. Para abrir y guardar los archivos que no son de medios, se debe tener en cuenta el uso de cuadros de diálogo personalizados en lugar de estos métodos.

Modificación de rutas de archivos

Se puede también modificar la ruta de un objeto File existente llamando al método resolvePath() o modificando la propiedad nativePath o url del objeto, como en los ejemplos siguientes (en 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 

Al usar la propiedad nativePath , utilice el carácter de barra diagonal (/) como carácter separador de directorios. En Windows, también se puede emplear el carácter de barra diagonal inversa (\), pero no es recomendable, ya que implica que el código no funcione en distintas plataformas.

Esquemas de URL compatibles de AIR

En AIR, Al definir la propiedad url de un objeto File se puede utilizar cualquiera de los esquemas de URL siguientes:

Esquema de URL

Descripción

file

Se utiliza para especificar una ruta relativa a la raíz del sistema de archivos. Por ejemplo:

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

La norma para URL especifica que la URL tipo "file" debe tener el formato file://<host>/<ruta> . Como caso especial, <host> puede ser la cadena vacía, que se interpreta como "la máquina desde la cual se interpreta la URL". Esta es la razón por la cual las URL del tipo "file" a menudo tienen tres barras diagonales (///).

app

Se utiliza para especificar una ruta relativa al directorio raíz de la aplicación instalada (el directorio que contiene el archivo aplicacion.xml para la aplicación instalada). Por ejemplo, la ruta siguiente apunta a un subdirectorio de imágenes del directorio de la aplicación instalada:

app:/images

app-storage

Se utiliza para especificar una ruta relativa al directorio de almacenamiento de la aplicación. AIR define un directorio de almacenamiento exclusivo para cada una de las aplicaciones instaladas, lo cual proporciona un lugar útil para guardar datos que son específicos para esa aplicación. Por ejemplo, la siguiente ruta apunta al archivo "prefs.xml" en el subdirectorio "settings" del directorio de almacenamiento de la aplicación:

app-storage:/settings/prefs.xml

Control de copias de seguridad y almacenamiento en caché

En ciertos sistemas operativos, especialmente iOS y Mac OS X, se pueden crear automáticamente copias de seguridad de archivos de aplicación en un almacenamiento remoto. Además, en iOS existen restricciones de copia de seguridad aplicables de algunos archivos, así como restricciones sobre la ubicación en la que guardar archivos según su finalidad.

A continuación se resumen las directrices de Apple sobre copia de seguridad y almacenamiento. En secciones posteriores encontrará más información al respecto.

  • Para especificar que no se requiere una copia de seguridad de un archivo y (solo iOS) que el sistema operativo puede eliminarlo si hace falta liberar espacio de almacenamiento en el dispositivo, guarde el archivo en el directorio de memoria caché ( File.cacheDirectory ). Esta es la ubicación preferida en iOS y debería utilizarse para la mayoría de archivos que pueden volver a generarse o cargarse.

  • Para especificar que no se requiere una copia de seguridad de un archivo pero el sistema operativo no debería eliminarlo, guárdelo en uno de los directorios de bibliotecas de la aplicación (por ejemplo, File.applicationStorageDirectory ) o en el directorio de documentos ( File.documentsDirectory ). Establezca la propiedad de objeto File preventBackup en true . Apple lo exige así para contenido que puede volver a generarse o cargarse y es necesario para el funcionamiento correcto de la aplicación cuando se usa sin conexión.

Archivos que requieren copia de seguridad

A fin de ahorrar espacio de copia de seguridad y reducir el uso de ancho de banda de red, las directrices de Apple para aplicaciones de iOS y Mac especifican que solo se deberían hacer copias de archivos que contengan datos introducidos por usuarios o información que no se pueda volver a generar o cargar.

De forma predeterminada se crean copias de seguridad de todos los archivos que haya en las carpetas de bibliotecas de la aplicación. En Mac OS X se encuentran en el directorio de almacenamiento de la aplicación. En iOS, esto incluye el directorio de almacenamiento de la aplicación, el directorio de la aplicación, el directorio del escritorio y el del usuario (puesto que dichos directorios están asignados a las carpetas de bibliotecas de aplicación en iOS). Por lo tanto, se hacen copias de seguridad de todos los archivos contenidos en esos directorios, y se guardan en el almacenamiento del servidor de forma predeterminada.

Si guarda en una de estas ubicaciones un archivo que puede volver a generarse en la aplicación, debería marcarlo para indicar al sistema operativo que no haga una copia de seguridad del mismo. Para indicar que un archivo no debe tener una copia de seguridad, establezca la propiedad de objeto File preventBackup en true .

En iOS, aunque un archivo en una de las carpetas de bibliotecas de aplicación tenga la propiedad preventBackup establecida en true , se marca como archivo persistente que no debería ser eliminado por el sistema operativo.

Control de eliminación de archivos y almacenamiento en memoria caché

Las directrices de Apple para aplicaciones de iOS especifican que, de ser posible, el contenido regenerable debería poder ser eliminado por el sistema operativo si hiciera falta liberar espacio de almacenamiento en el dispositivo.

En iOS, los archivos ubicados en las carpetas de bibliotecas de aplicación (por ejemplo, en el directorio de almacenamiento de la aplicación o en el de documentos) se marcan como permanentes y el sistema operativo no los elimina.

Guarde en el directorio de memoria caché de la aplicación archivos que la aplicación puede volver a crear y pueden eliminarse en caso de faltar espacio de almacenamiento. Para acceder al directorio de memoria caché se utiliza la propiedad estática File.cacheDirectory .

En iOS, el directorio correspondiente es el directorio de caché de la aplicación (<Application Home>/Library/Caches). En otros sistemas operativos, este directorio se asigna a uno equivalente. Por ejemplo, en Mac OS X también se asigna al directorio Caches en la biblioteca de aplicación. En Android, el directorio de memoria caché se asigna al directorio de caché de la aplicación. En Windows, el directorio de memoria caché se asigna al directorio temp del sistema operativo. Tanto en Android como en Windows, el directorio es accesible mediante una llamada a los métodos de clase File createTempDirectory() y createTempFile() .

Búsqueda de la ruta relativa entre dos archivos

El método getRelativePath() sirve para buscar la ruta relativa entre dos archivos:

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 

El segundo parámetro del método getRelativePath() , el parámetro useDotDot , permite que se incluya la sintaxis .. en los resultados para indicar directorios superiores:

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 

Versiones canónicas de nombres de archivo

En los nombres de ruta y archivo no se distingue entre mayúsculas y minúsculas en Windows y Mac OS. En el siguiente ejemplo, dos objetos File apuntan al mismo archivo:

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

No obstante, los documentos y nombres de directorio sí incluyen mayúsculas. En los siguientes ejemplos se da por sentado que existe una carpeta llamada AIR Test en el directorio de documentos:

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

El método canonicalize() convierte el objeto nativePath para que figuren correctamente las mayúsculas en el nombre del archivo o directorio. En los sistemas de archivos que distinguen entre mayúsculas y minúsculas (como Linux), cuando existen varios archivos con nombres que difieren únicamente en las mayúsculas y minúsculas, el método canonicalize() ajusta la ruta para que coincida con el primer archivo encontrado (en un orden que determina el sistema de archivos).

El método canonicalize() también sirve para convertir nombres de archivo cortos (nombres "8.3") en nombres de archivo largos en Windows, como en los ejemplos siguientes:

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

Trabajo con paquetes y vínculos simbólicos

Diversos sistemas operativos admiten archivos de paquetes y archivos de vínculos simbólicos:

Paquetes En Mac OS, los directorios pueden designarse como paquetes y aparecer en el Finder de Mac OS archivo sencillo en lugar de como directorio.

Vínculos simbólicos Mac OS, Linux y Windows Vista admiten este tipo de vínculos. Los vínculos simbólicos permiten que un archivo apunte a otro archivo o directorio del disco. Si bien son similares, los vínculos simbólicos no son lo mismo que los alias. Un alias siempre se notifica como archivo (y no como directorio) y la lectura o escritura en un alias o acceso directo no afecta nunca el archivo o directorio original al que apunta. Por otro lado, un vínculo simbólico se comporta exactamente igual que el archivo o directorio al que apunta. Se puede notificar como archivo o directorio, y la lectura o escritura en un vínculo simbólico afecta al archivo o directorio al que apunta y no al propio vínculo simbólico. Asimismo, en Windows la propiedad isSymbolicLink para un objeto File que hace referencia a un punto de unión (utilizado en el sistema de archivos NTFS) se establece en true .

La clase File incluye las propiedades isPackage y isSymbolicLink para comprobar si un objeto File remite a un paquete o a un vínculo simbólico.

El código siguiente itera a través del directorio del escritorio del usuario, enumerando los subdirectorios que no son paquetes:

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

El código siguiente itera a través del directorio del escritorio del usuario, enumerando los archivos y directorios que no son vínculos 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); 
    } 
} 

El método canonicalize() modifica la ruta de un vínculo simbólico para apuntar al archivo o directorio al que se refiere el vínculo. El código siguiente itera a través del directorio del escritorio del usuario y notifica las rutas referenciadas por archivos que son vínculos 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); 
    } 
} 

Determinación del espacio disponible en un volumen

La propiedad spaceAvailable de un objeto File es el espacio (expresado en bytes) que está disponible para ser utilizado en el lugar donde se encuentra el archivo. Por ejemplo, el código siguiente comprueba el espacio disponible en el directorio de almacenamiento de la aplicación:

trace(File.applicationStorageDirectory.spaceAvailable); 

Si el objeto File remite a un directorio, la propiedad spaceAvailable indica el espacio en el directorio que utilizan los archivos. Si el objeto File remite a un archivo, la propiedad spaceAvailable indica el espacio en el que podría ampliarse el archivo. Si no existe la ubicación de archivo, la propiedad spaceAvailable se define en 0. Si el objeto File remite a un vínculo simbólico, la propiedad spaceAvailable se define en el espacio disponible en el lugar al que apunta el vínculo simbólico.

El espacio disponible para un directorio o archivo suele ser el mismo que el que está disponible en el volumen que contiene el directorio o el archivo. No obstante, el espacio disponible puede ajustarse teniendo en cuenta los cupos y límites por directorio.

Para añadir un archivo o directorio a un volumen se suele necesitar más espacio que el tamaño mismo del archivo o del contenido del directorio. Por ejemplo, el sistema operativo puede necesitar más espacio para guardar la información del índice. O los sectores del disco que se requieren pueden usar espacio adicional. Además, el espacio que hay disponible cambia constantemente. Por todo ello es que no se puede asignar todo el espacio notificado a guardar los archivos. Para ver más información sobre la escritura en el sistema de archivos, consulte Lectura y escritura de archivos .

El método StorageVolumeInfo.getStorageVolumes() proporciona más información detallada sobre los volúmenes de almacenamiento montados (consulte Trabajo con volúmenes de almacenamiento ).

Apertura de archivos con la aplicación del sistema predeterminada

En AIR 2, es posible abrir un archivo utilizando la aplicación registrada por el sistema operativo para abrirla. Por ejemplo, una aplicación de AIR puede abrir un archivo DOC con la aplicación resgitrada para abrirlo. Utilice el método openWithDefaultApplication() de un objeto File para abrir el archivo. Por ejemplo, el siguiente código abre un archivo denominado test.doc en el escritorio del usuario y lo abre con la aplicación predeterminada para los archivos DOC:

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
Nota: en Linux, el tipo MIME del archivo (no la extensión del nombre de archivo) determina la aplicación predeterminada para un archivo.

El siguiente código permite al usuario buscar un archivo mp3 y abrirlo en la aplicación predeterminada para reproducir archivos 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(); 
}

El método openWithDefaultApplication() no se puede utilizar con archivos ubicados en el directorio de la aplicación.

AIR impide el uso del método openWithDefaultApplication() para abrir determinados archivos. En Windows, AIR impide la apertura de archivos de determinados tipos como, por ejemplo, EXE o BAT. En Mac OS y en Linux, AIR impide abrir archivos que inician una aplicación específica. (Estos incluyen Terminal y AppletLauncher en Mac OS; y csh, bash o ruby en Linux.) Si se intenta abrir uno de estos archivos con el método openWithDefaultApplication() , se generará una excepción. Para obtener una lista de los tipos de archivo con limitaciones, consulte la entrada de la referencia del lenguaje del método File.openWithDefaultApplication() .

Nota: esta restricción no existe en una aplicación de AIR instalada con un programa de instalación nativo (una aplicación de escritorio ampliada).