Cristalab

Abrir y leer archivos de texto del disco duro con Adobe AIR

Por: Skatos + 14.03.2008

Hola, aquí dejo un listado de código para leer un archivo del disco según el modelo AIR para Flash CS3.
Los ingredientes a tener en el escenario:

Importamos las clases necesarias para el manejo de archivos con AIR:

Código :

import flash.net.FileFilter;
import flash.filesystem.*;

Importamos unas clases para detectar eventos y eventos del mouse:

Código :

import flash.events.Event;
import flash.events.MouseEvent;

definimos el objeto archivo:

Código :

var archivo:File = new File();

definimos un filtro de archivos, e.g. en el cuadro de diálogo nos va a mostrar sólo archivos de este tipo:

Código :

var tipoArchivo:FileFilter = new FileFilter("Archivos de texto", "*.as;*.css;*.html;*.txt;*.xml");

ahora nada interesante, sólo eventos del mouse y que nos ponga la manito cuando pasemos encima de los clips:

Código :

cargar_mc.useHandCursor = cerrar_mc.useHandCursor = true;
cargar_mc.addEventListener(MouseEvent.CLICK, cargar);
cerrar_mc.addEventListener(MouseEvent.CLICK, cerrar);
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, arrastrar);

al hacer click en el escenario, arrastramos la ventana, naturalmente va a arrastrar desde cualquier parte que hagamos click, aún encima del campo de texto. En la documentación se detalla cómo definir este comportamiento, pero a fines de sencillez queda así:

Código :

function arrastrar(e:MouseEvent) {
   this.stage.nativeWindow.startMove();
}

al hacer click en el clip cerrar, cierra la ventana AIR:

Código :

function cerrar(e:MouseEvent) {
   this.stage.nativeWindow.close();
}

al hacer click en el clip cargar, pasan varias cosas:

Código :

function cargar(e:MouseEvent) {

Con el siguiente método llamamos al cuadro del diálogo Abrir del sistema, le pondremos de título a la ventana "Abrir archivo..." y mostraremos únicamente los tipos de archivos especificados anteriormente con el array FileFilter:

Código :

        archivo.browseForOpen("Abrir archivo...", [tipoArchivo]);

Cuando seleccionemos y abramos un archivo, se lanzará la función abrirArchivo:

Código :

   archivo.addEventListener(Event.SELECT, abrirArchivo);
   
   function abrirArchivo(e:Event):void {

ya dentro de abrirArchivo, declaramos un puntero al archivo:

Código :

      var puntero:FileStream = new FileStream();

Esta es la parte más curiosa. Abrimos el puntero pasándole como parámetro el archivo seleccionado al momento que se lanzó el evento SELECT. Este objeto está dentro del evento e, en la propiedad target sin embargo, si sólo lo llamamos e.target, lo toma como un objeto y no como un objeto FILE, es por eso es que le pondremos 'e.target as File'. Abrimos el flujo en modo de lectura.

Código :

      puntero.open(e.target as File, FileMode.READ);

y lo volcamos a una string en unicode:

Código :

      var datosArchivo:String = puntero.readUTFBytes(puntero.bytesAvailable);

Finalmente, lo cargamos en el campo de texto

Código :

      texto_txt.text = datosArchivo;
   }
}

A continuación el código completo:

Código :

import flash.filesystem.*;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.FileFilter;

var archivo:File = new File();
var tipoArchivo:FileFilter = new FileFilter("Archivos de texto", "*.as;*.css;*.html;*.txt;*.xml");

cargar_mc.useHandCursor = cerrar_mc.useHandCursor = true;
cargar_mc.addEventListener(MouseEvent.CLICK, cargar);
cerrar_mc.addEventListener(MouseEvent.CLICK, cerrar);
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, arrastrar);

function arrastrar(e:MouseEvent) {   this.stage.nativeWindow.startMove();   }
function cerrar(e:MouseEvent) {      this.stage.nativeWindow.close();   }
function cargar(e:MouseEvent) {
   archivo.browseForOpen("Abrir archivo...", [tipoArchivo]);
   archivo.addEventListener(Event.SELECT, abrirArchivo);
   function abrirArchivo(e:Event):void {
      var puntero:FileStream = new FileStream();
      puntero.open(e.target as File, FileMode.READ);
      var datosArchivo:String = puntero.readUTFBytes(puntero.bytesAvailable);
      texto_txt.text = datosArchivo;
   }
}


Espero que lo disfruten, saludos.

Etiquetas air flash

Comentarios | Enviar un comentario
Uy que bueno!!!
Lo voy a probar, tanks!! Thumbs up
Por: CarlosRuminott
Lo probé (ctrl enter) y funciona bien tu tip, grax man! pero sigo teniendo un problema a la hora de querer exportarlo como paquete de instalación. Acá les dejo un link sobre este tema (ver el xml en dreamweaver ó algún editor de texto): http://designinlive.com/Cristalab/Air/ ¿puede ser que el xml, se esté exportando mal?

Saludos Cristabelinos/nas! Riendo
Por: soy_lo_maximo
Buen tip Skatos Thumbs up

soy_lo_maximo :

Saludos Cristabelinos/nas!
WTF!? clabers, please... U_U
Por: Zguillez
che maximo, fijate que en Commands\AIR Application & Installer Settings hay una etiqueta que probablemente dice
Digital Signature: Create AIRI file to sign later
y a la derecha hay un botón Change, si apretás el botón te sale un panel para crear tu propio certificado o importar uno ya existente. Con este certificado configurado ahora podrás publicar tu AIR como instalador.
Gracias Carlos y Zguillez
Por: Skatos
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.