lunes, mayo 19, 2008

Codigo Util para Java I I - Archivos de Texto

Tareas básicas al trabajar en java para la Universidad serian una como, leer un archivo, recorrerlo linea por línea, contar el numero de lineas, hacer que cada linea tenga una serie de registros, guardar datos, recuperar... cosas asi...

No voy a extenderme en explicar el codigo que está dentro de los metodos, sino mas bien, la utilizacion de la clase, ya que tiene una forma especial de usarse, que si no se hace correctamente no funcionará:

Nombre del fichero: Archivos.java


import java.io.*;
import java.util.*;


public class Archivos {
private File archivo;
private FileReader in;
private FileWriter out;
private FileOutputStream fos;
private ObjectOutputStream oos;
private FileInputStream fis;
private ObjectInputStream ois;
private static Archivos archivos;


public Archivos() {
super();

}

public static Archivos getInstance() {
if(archivos == null){
archivos = new Archivos();
}
return archivos;
}

public synchronized void escribirArchivo(String ruta, String contenido) throws IOException {
getInstance();
File file = new File(ruta);
out = new FileWriter(file.getAbsolutePath(), true);
out.write(contenido);
out.close();
}

public synchronized String leerArchivo(String ruta) throws IOException, FileNotFoundException {
StringBuffer cadena = new StringBuffer();
in = new FileReader(ruta);

int c = 0;
while((c = in.read()) != -1) {
cadena.append((char) c);
}

return cadena.toString();
}

public synchronized void copiarArchivo(String origen, String destino, boolean annadir) throws IOException, FileNotFoundException {
File archivoOrigen = new File(origen);
File archivoDestino = new File(destino);

in = new FileReader(archivoOrigen.getAbsolutePath());
out = new FileWriter(archivoDestino.getAbsolutePath(), annadir);

int caracter = 0;
while ((caracter = in.read()) != -1) {
out.write(caracter);
}

in.close();
out.close();
}

public synchronized void guardarObjeto(String ruta, Object objeto) throws IOException {
fos = new FileOutputStream(ruta);
oos = new ObjectOutputStream(fos);
oos.writeObject(objeto);
fos.flush();
}

public synchronized Object recuperarObjeto(String ruta) throws IOException, FileNotFoundException, ClassNotFoundException {
fis = new FileInputStream(ruta);
ois = new ObjectInputStream(fis);
return ois.readObject();
}
}






Sencillamente hacen una instancia de la clase (es obligatorio), se llama a el metodo que lo instancia (cada vez que se va a abrir un nuevo archivo) y luego se procede a utilizar los metodos propios de la clase


Archivos miArchivo = new Archivos();
miArchivo = Archivos.getInstance();
try{

String ruta = "c:\salida.txt";
String contenido = ES.leer("Digite el texto a Continuacion: \n");
miArchivo.escribirArchivo(ruta,contenido);

ES.imprimir("\nContenido del Archivo: \n\n" + miArchivo.leerArchivo(ruta));
}catch(Exception e){
ES.imprimir(e)
}



Utilizando la clase de la publicación anterior, podemos de una forma mas sencilla escribir y leer hacia un archivo desde nuestro codigo.


Saludos, y espero que sea de utilidad

domingo, mayo 18, 2008

Codigo Util para Java I - Impresion en Pantalla y Lectura del Teclado

Cuando empezamos en java no tenemos ni la menor idea de por donde empezar; en otros programas como Pascal o C y C++, imprimir algo en pantalla es muy fácil, al igual que leer algo del teclado para guardarlo en una variable para utilizarlo después, pero java tiene tantas cosas y tan lejanas una de la otra, que las tareas mas sencillas se vuelven tediosas; así que, aquí traigo una serie de posts con código útil y básico, para iniciar en java.

  • Imprimir en Pantalla realmente es muy sencillo, pero si es algo largo de escribir:

System.out.println("Hola Mundo");


Pero aunque sea algo redundante, podemos hacer la nuestra propia, encapsulando el método:


public void imprimir(Object o){
System.out.println(o);
}


Le mandamos un objeto para que tenga la funcionalidad misma del método original de imprimir cualquier cosa que se le envié.

imprimir("Hola a todos!");


  • Lectura del Teclado Ahora, leer del teclado si es más complicado, pero podemos encapsular la serie de lineas en un solo método para simplificarlo




import java.io.*;
public String leer(String msg){
System.out.print(msg);
try{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader FlujoE = new BufferedReader(isr);
str = FlujoE.readLine();
}
catch(IOException e){
System.err.println("Errors:" + e.getMessage());
}
return str;
}




Este método al ser llamado, se detiene a esperar los caracteres del teclado, y termina al ser presionado ENTER o INTRO también en windows (hay linux que no lo interpretan igual) y luego le da formato y lo convierte en String

Para cada proyecto entonces tendríamos que copiar los métodos, igual seria molesto, entonces mejor tenerla en una clase aparte, y llamarla naturalmente desde cada uno de nuestros proyectos, con la diferencia que la clase seria Static, lo que quiere decir que no tenemos que hacerle un new() (crearle memoria o crear una instancia de la clase) para poder ejecutarla, por lo que es mucho mas útil. así tendríamos lo siguiente:


Nombre del Archivo: ES.java


import java.io.*;

public class ES{
static String str = "";
public ES(){
}
public static String leer(String msg){
System.out.print(msg);
try{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader FlujoE = new BufferedReader(isr);
str = FlujoE.readLine();
}
catch(IOException e){
System.err.println("Errors:" + e.getMessage());
}
return str;
}
public static void imprimir(Object o){
System.out.println(o);
}


}





Para llamarlo haríamos como sigue desde cualquier método main() de java para probarlo:





String loQueEscribi = ES.leer("Digite su mensaje despues de aqui: ");
ES.imprimir("Ud escribio esto: " + loQueEscribi );




Saludos y espero que sea de utilidad

sábado, mayo 17, 2008

Codigo Util para Flash

Cuando se trabaja en flash (especialmente as2) puede ser muy confuso saber que se puede llegar a la misma solución por varios caminos, hay cosas que parece que no tienen ninguna utilidad, por eso voy a hacer referencia a algunas cosas de esas que parece que no la tienen, con ejemplos que si lo son:

  • MovieClips como Arrays Cada que creamos un movieClip y dentro de este creamos otro, en flash se maneja como si fuera un array de movieClips, asi que ud sin saber cuantos hay dentro de este, o sus nombres, puede hacer referencia a ellos de la siguiente manera:

  for (item_mc in gran_mc) {
gran_mc.item_mc.gotoAndStop("mi_label");
}
  • Crear e Insertar Propiedades y Funciones Personalizadas Si bien podemos hacer clases en as2 y ponerle nuestras propiedades y metodos, no podemos modificar la clase movieClip, pero para cada instancia de movieClip podemos insertarle "al aire" funciones y propiedades que nos pueden servir si a una variedad de objetos duplicados tienen la misma propiedad o accion:


my_mc.id = 0
my_mc.my_function = function(){
trace("accion de la funcion")
}
//asi se llama a la funcion
my_mc.my_function();
  • Referenciando a un Botón dentro de sí mismo Muchas veces para manejar un gran numero de botones al mismo tiempo, con iguales acciones y comportamiento, lo que hago es insertarlos en un array, y lo recorro y le asigno las acciones por un for, pero tenia el problema que no podía referenciar directamente al botón porque al terminar el ciclo, la variable muere, y el valor que queda para el contador es el ultimo, entonces al referenciar el array con la variable, solo me señalaba el ultimo botón, así que para no perder la referencia de sí mismo en el botón, solo llamo a this, y el botón se llama a si mismo sin pasar por el array y todo solucionado:



var botones:Array = new Array();
for(var k=0; k < botones.length; k++){
botones[k].id = k;
botones[k].onPress = function(){
trace(this); //nombre real
trace(botones[k]); //nombre perdido por valor de k
trace(this.id); //id real
trace(k); //id perdido
}
}



espero sea de utilidad

lunes, mayo 05, 2008

Creaktif -- Flash Review

Bueno primero para decirles que voy a estar aqui, haciendo reviews de paginas webs en especial paginas diseñadas en flash, y tambien algunas aplicaciones..
asi que aqui va el primer review de Nitos..



Porque escogi esta pagina? Bueno ya que me gusta lo diferente, lo arriesgado, osea NO lo tradicional escogi esta pagina web para hacerle un review..

Pagina: Creaktif
Screenshot:



Lo Bueno: El diseño es totalmente revolucionario, nunca en la vida habia visto una pagina tan diferente de las demas!, gracias a este diseño siempre te vas a querer quedar por mas tiempo.
Las pequeñas animaciones, como cuando abre una de esas ventanas, estan muy bien elaboradas.

Lo malo: Esta muy bonita la pagina, pero si el usuario no tiene mucho tiempo, ni vera la pagina ya que dura algo en cargar.. :S

Concuerdo con ustedes??

domingo, mayo 04, 2008

Bordeando la Seguridad en Flash - Leyendo XML

Por motivos de seguridad el flash solo permite leer archivos alojados en su propio dominio, así que si ud pretende leer desde un flash alojado en www.midominio.com, un feed en www.miotrodominio.com, ud no podrá contactarse con el servidor porque el flash no lo permite.

Ahora, una forma sencilla de pegarse de un servicio de feed, como uno que nos dé las noticias, es creando un archivo de servidor que lea el contenido de ese feed, y devuelva exactamente lo mismo, pero con la diferencia que estará en nuestro dominio.

Entonces que tienes que hacer?


Crear un PHP o un ASPX que por dentro lea el XML, y lo imprima sin mas,
y nosotros llamamos a nuestro .php/.aspx y cargamos el contenido


Aqui por ejemplo este PHP que tiene muy pocas lineas y es demasiado útil:


leerArchivo.php

if(isset($HTTP_GET_VARS['ruta'])){
$filename = $ruta;
//header("Content-type: text/xml");
readfile ($filename);
}
?>

Dejo comentado la linea del header, porque lo que hace es ponerle al XML
una nueva tag de header que arruinaría el plan de leer el XML como ya lo planeamos,
sin embargo la dejo por si necesitan poner otro tipo de header a su XML o feed.

Al momento de llamarlo en nuestro dominio seria algo de este estilo:

http://www.midominio.com/leerArchivo.php?ruta=www.miotrodominio.com/feed.xml

esto devolvería el mismo contenido del XML que está en otro dominio, pero bajo el nuestro,
haciendo válida la seguridad del flash.