viernes, 29 de agosto de 2008

Uso de la clase java.util.Properties

Esta clase representa un conjunto de propiedades persistentes.

Cuando usamos esta clase pueden ocurrir las siguientes excepciones:
java.io.FileNotFoundException: no se encuentra el archivo
java.io.IOException: ocurrió un problema al leer el archivo

Crear el archivo de propiedades

Para indicar las propiedades se usa la forma nombre=valor, si quisieramos escribir la propiedad en dos lineas tendriamos que usar el simbolo '\'. Los comentarios inician con #.

Para nuestro ejemplo crearemos el archivo propiedades.txt con el siguiente contenido:

# esto es un comentario
edad=15
nombre=Pedro \
Gómez

Para escribir #, !, =, : tienen que estar precedidos por un backslash (\).

Lectura de Propiedades

Para leer una a una las propiedades se hace lo siguiente:

try{
//creamos el objeto para almacenar las propiedades
Properties p = new Properties();
//cargamos el archivo
p.load(new FileInputStream("propiedades.txt"));
//obtenemos las propiedades
System.out.println("nombre = " + p.getProperty("nombre"));
System.out.println("edad = " + p.getProperty("edad"));
}
catch (Exception e) {
System.out.println(e);
}

Recorrido de las propiedades

Para leer todas las propiedades se hace lo siguiente:

try {
//creamos el objeto para almacenar las propiedades
Properties p = new Properties();
//cargamos propiedades, de esta forma podremos añadir y modificar las propiedades de este archivo
p.load(new FileInputStream("propiedades.txt"));
//obtenemos una enumeracion con los nombres de las propiedades
Enumeration propiedades=p.propertyNames();
//hacemos un ciclo para obtener todas las propiedades
while (propiedades.hasMoreElements()){
String propiedad=(String)(propiedades.nextElement())
System.out.println ( propiedad + "= " + p.getProperty(propiedad));
}
}

catch (Exception ex){
System.out.println(ex);
}

El método propertyNames() devuelve una enumeracion con los nombres de las propiedades.
El método nextElement() nos devuelve un objeto diferente la enumeracion en cada iteración del ciclo.

Escritura de Propiedades

try{
//creamos el objeto para almacenar las propiedades
Properties p = new Properties();
//cargamos propiedades, de esta forma podremos añadir y modificar las propiedades de este archivo
p.load(new FileInputStream("propiedades.txt"));
//añadimos propiedades
p.setProperty("direccion","Panama");
//cambiamos la propiedad edad
p.setProperty("edad","20");
//Decimos el nombre del archivo de destino para grabar las propiedades
java.io.FileOutputStream out = new java.io.FileOutputStream("propiedades.txt");
//Grabamos las propiedades en el archivo
p.store(out, "nuevas propiedades");

}
catch (Exception e) {
System.out.println(e);
}

viernes, 22 de agosto de 2008

Lectura de archivos de texto con ActionScript

Primero que nada necesitamos el archivo para leer. Debe tener el siguiente formato:

variable1=contenido1&variable2=contenido2&...variableN=contenidoN

Para nuestro ejemplo usaremos un archivo llamado archivo.txt con el siguiente contenido:

nombre=Juan Perez&telefono=555-5555

Luego, para realizar la lectura utilizamos el siguiente codigo:

//Creamos la variable que leerá el archivo
var datosleidos = new LoadVars();

//Leemos el archivo. Si el archivo se encuentra en un directorio distinto hay que especificar la ruta completa
datosleidos.load("archivo.txt");

//Función que es llamada despues de leer el archivo
datosleidos.OnLoad = function() {
//Mostramos las dos variables del archivo
trace (datosleidos.nombre);
trace (datosleidos.telefono);
};

La funcion trace() solo funciona si estamos probando el archivo en Adobe Flash y no con el FlashPlayer.

Y listo. Con esto se pueden leer archivo de texto de forma sencilla y rápida.

Nota. No se pueden escribir archivos de texto con flash. Para hacerlo se tendria que hacer a través de un script PHP o ASP.

Ejecutar PHP desde Flash

Hay varias forma de ejecutar un script php desde flash. La mas sencilla es la siguiente:

var variable = new LoadVars();
variable.load("escritura.php");

Con esto ejecutamos el script escritura.php

Si queremos enviarle variables al script PHP agregamos un signo de interrogacion (?) y copiamos las variables y sus valores separados por el simbolo &

variable.load("escritura.php?nombre=Juan Perez&telefono=555-5555");

Con esto enviamos las variables nombre y telefono

Para accesar a estas variables en el script PHP utilizamos el arreglo $_GET de la siguiente forma:
$_GET['nombre'] contiene la variable nombre
$_GET['telefono'] contiene la variable telefono

Si además queremos ejecutar instrucciones en flash después de ejecutar el script PHP se escribe el siguiente metodo:

variable.OnLoad = function(){
instrucciones a ejecutar después del script PHP
}

Como se puede observar, es sencillo ejecutar un script PHP desde un código ActionScript.

jueves, 21 de agosto de 2008

Uso de la clase java.awt.Desktop

Esta clase permite a una aplicación Java lanzar aplicaciones asociadas registradas en el ordenador para manejar un archivo o URL.

Las operaciones soportadas incluyen:

  • Lanzar el explorador web por defecto para abrir una URL
  • Lanzar el cliente de correo por defecto
  • Lanzar una aplicación registrada para abrir, editar o imprimir un archivo específico
Esta clase puede ser utilizada desde Java 6.

Lanzar el Explorador Web

import java.net.URI;
import java.net.URISyntaxException;
import java.io.IOException;
import java.awt.Desktop;
import java.awt.Desktop.Action;

public class UsoDeDesktop1 {
public static void main (String args[]) throws URISyntaxException, IOException{

//Se comprueba si la clase es soportada en el ordenador
if (!Desktop.isDesktopSupported()){
System.out.printf ("La clase Desktop no es soportada");
System.exit(0); //Termina la aplicación
}

//Se obtiene el objeto Desktop
Desktop escritorio = Desktop.getDesktop();

//Se crea un objeto URI indicando la dirección web
URI direccion = new URI("http://java.sun.com/javase/6/docs/api/java/awt/Desktop.html");

//Se verifica que se puede utilizar la función de abrir una dirección web en este ordenador
if (escritorio.isSupported(Desktop.Action.valueOf("BROWSE")) )
escritorio.browse(direccion); //Se abre la dirección web
else
System.out.printf ("La función BROWSE no es soportada");

}
}

Abrir y Editar un Archivo

import java.io.File;
import java.io.IOException;
import java.awt.Desktop;
import java.awt.Desktop.Action;

public class UsoDeDesktop2 {
public static void main (String args[]) throws IOException{

//Se comprueba si la clase es soportada en el ordenador
if (!Desktop.isDesktopSupported()){
System.out.printf ("La clase Desktop no es soportada");
System.exit(0); //Termina la aplicación
}

//Se obtiene el objeto Desktop
Desktop escritorio = Desktop.getDesktop();

//Se crea un objeto File indicando el archivo
File archivo = new File("UsoDeDesktop2.java");

//Se verifica que se puede utilizar la función de abrir archivos en este ordenador
if (escritorio.isSupported(Desktop.Action.valueOf("OPEN")) )
escritorio.open(archivo);
else
System.out.printf ("La función OPEN no es soportada");

//Se verifica que se puede utilizar la función de editar archivos en este ordenador
if (escritorio.isSupported(Desktop.Action.valueOf("EDIT")) )
escritorio.edit(archivo);
else
System.out.printf ("La función EDIT no es soportada");

}
}

miércoles, 20 de agosto de 2008

Entrada y salida con la clase java.io.Console

Esta clase posee métodos para acceder a la consola que se encuentre asociada a la JVM (Máquina Virtual de Java) actual.
Nos permite leer cadenas y contraseñas de forma fácil siempre y cuando haya una consola asociada a nuestra aplicación.

Esta clase puede ser utilizada desde Java 6.

Observa el primer ejemplo:

import java.io.Console;

public class UsoDeConsola1 {
public static void main (String args[]){

Console consola= System.console();

//si consola es null significa que no podremos utilizar esta clase
if (consola==null){
System.out.printf ("No existe una consola asociada a esta JVM");
System.exit(0); //Termina la aplicación
}

consola.printf("Ingresa al sistema\n");

String user= consola.readLine("user: ");
char password[] = consola.readPassword("pass: ");

//convierte el arreglo de caracteres en un String
String pass= new String (password);

consola.printf("\nEl usuario introducido es: " + user + ", y el password es: " + pass);
}
}

En este ejemplo, primero se verifica si existe una consola (consola==null). Luego se lee muestra el mensaje "user: " y se espera que el usuario introduzca el nombre de usuario. Luego se muestra el mensaje "pass: " y se lee la contraseña del usuario (pero sin mostrarla).

Como pudiste observar, el método readLine() se utiliza para leer cadenas, y el método readPassword() se utiliza para leer contraseñas sin mostrarlas mientras se escribe. El método readPassword() lee un arreglo de caracteres, por eso se tuvo que convertir a un String antes de imprimirlo. Ambos métodos reciben una cadena para mostrar al usuario.

Otras formas de hacer lo mismo serían:

Ejemplo2:

consola.printf("Ingresa al sistema\n");

String mensaje1="user: ", mensaje2="pass: ";

String user= consola.readLine("%s", mensaje1);
char password[] = consola.readPassword("%s",mensaje2);

En este caso se utilizó la versión de los métodos de lectura que funciona similar al método prinf().

Ejemplo3:

consola.printf("Ingresa al sistema\n");

consola.printf("user: ");
String user= consola.readLine();
consola.printf("pass: ");
char password[] = consola.readPassword();

En este último ejemplo, los mensajes se imprimieron en instrucciones separadas y no en los métodos para leer.

Lectura con la clase java.util.Scanner

Esta clase es un simple escaner de texto que permite procesar tipos primitivos y cadenas usando expresiones regulares.

Un Scanner divide su entrada en tokens usando un patrón delimitador, que por defecto es el espacio en blanco. Los tokens resultantes pueden ser convertidos en diferentes tipos usando los diferentes métodos next.

Esta clase puede ser utilizada desde Java 5.

El siguiente ejemplo permite leer desde la consola:

import java.util.Scanner;

public class UsoDeScanner1 {
public static void main (String args[]){

String nombre, apellido;
int edad;

Scanner sc = new Scanner(System.in); //Se indica que se quiere leer desde consola
System.out.print("Introduce tu nombre, apellido y edad: ");
nombre = sc.next();
apellido = sc.next();

edad = sc.nextInt();
System.out.println("Nombre: " + nombre);
System.out.println("Apellido: " + apellido);
System.out.print("Edad: " + edad);
}
}


Observa que el método nextInt() nos permite leer un tipo int, y el método next() nos permite leer un token (devuelve un String). Hay un método next para cada tipo de dato primitivo. Si se desea leer todos los tokens al mismo tiempo se utiliza el método nextLine().


Ejemplo2:


import java.util.Scanner;

public class UsoDeScanner2 {
public static void main (String args[]){


String mensaje1, mensaje2;

float numero;
Scanner sc = new Scanner("6.5 Hola Mundo\n Nueva Línea"); //Se indica que se quiere trabajar con una cadena fija

numero=sc.nextFloat();
mensaje1=sc.nextLine();

mensaje2=sc.nextLine();
System.out.println("Numero: " + numero);
System.out.println("Mensaje1:" + mensaje1);

System.out.println("Mensaje2:" + mensaje2);
}
}

En este caso, se trabajo con una cadena fija. El método nextFloat() obtiene el valor flotante 6.5, mientras que la primera llamada al método nextLine() obtiene el texto " Hola Mundo". Observa que se incluye el espacio en blanco, ya que el método nextLine() obtiene el texto que no ha sido procesado hasta encontrar un salto de línea o el fin de la cadena. La última llamada a nextLine() obtiene el texto " Nueva Línea".

Como último ejemplo, haremos un Scanner que divida la cadena en tokens usando el simbolo de dolar ( $ ):

import java.util.Scanner;
import java.io.File;

public class UsoDeScanner3 {
public static void main (String args[]) throws java.io.FileNotFoundException{

Scanner sc = new Scanner(new File("cadena.txt"));//Se indica que se quiere trabajar con un archivo de texto

sc.useDelimiter("[$]");

while (sc.hasNext())
System.out.println(sc.next());
}
}

En este ejemplo, leemos desde un archivo de texto la cadena que queremos analizar (se debe controlar la excepción java.io.FileNotFoundException). Observa que utilizamos el método hasNext() para leer todos los tokens como String.
Si el archivo tuviera la cadena Ejemplo$de$Scanner$3 la salida resultante sería:
Ejemplo
de
Scanner
3