Foros del Web » Programación para mayores de 30 ;) » Java »

FAQ's de Java

Estas en el tema de FAQ's de Java en el foro de Java en Foros del Web. Bueno, este es un tema que ya hacia tiempo le venia faltando a este foro, asi que aqui da inicio lo que seran la FAQ's ...

  #1 (permalink)  
Antiguo 06/10/2004, 23:00
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
FAQ's de Java

Bueno, este es un tema que ya hacia tiempo le venia faltando a este foro, asi que aqui da inicio lo que seran la FAQ's de Java, que debemos ir armando entre todos, y siguiendo el mismo esuqema que los demas foros, es decir.

Tema: Tema
Pregunta: Pregunta?
Respuesta: Respuesta
Ejemplo:
ejemplo

Donde el ejemplo si lo necesita siempre demos ponerlo entre los bloques [ PHP ] y [ /PHP ] lo que provoca que el codigo se coloree y podamos darle formato y sea mucho mas entendible

IMPORTANTE: Al poner nuevas FAQ's usen un mensaje nuevo para cada pregunta, no pongas mas de un FAQ por mensaje, pues si tenemos distribuidas las FAQ's en mensajes induviduales despues podremos hacer facilmente un indice para encontrar las respuestas mas rapido.

vamos, armemos entre todos las FAQ´s

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo

Última edición por goncafa; 07/10/2004 a las 08:40
  #2 (permalink)  
Antiguo 06/10/2004, 23:18
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
Tema: Java Principiante
Pregunta: Que es Java y para que sirve??
Respuesta: Java es un lenguage de tipo general, es decir, puedes programar cualquier cosa con el, desde un sistema operativo, hasta un pequeña aplicacion de consola. Es muy usado en el ambito WEB y de las redes, por sus capacidades nativas de comunicacion y seguridad.
Java ademas puede ser ejecutado desde dispocitivos moviles como celulares y PDA's, tambien se puede encontrar en televisores, microhondas y practicamente en lo que se te ocurra.
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 06/10/2004, 23:24
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
Tema: Arreglos
Pregunta: Como puedo declarar un arreglo??
Respuesta:
Los arreglos en Java se tratan como los objetos, es decir, para inicializar un arreglo debes emplear la misma metodologia que usas para iniciar una instancia de una clase

Ejemplo:
Código PHP:
//un arreglo de enteros de 10 posiciones
int arreglo []= new int[10];

//Un arreglo de String bidimencional de 8x8
String nombres[] = new String[8][8]; 
__________________
se despide hasta la proxima
Gonzalo Castillo
  #4 (permalink)  
Antiguo 06/10/2004, 23:31
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
Tema: Java Basico
Pregunta: Como debo hacer compraciones de igualdad entre Cadenas??
Respuesta:
En Java los tipos String son objetos y no tipos primitivos, por ende no se pueden comparar con 2 signos iguales de esta forma ==, en vez de ello existe un metodo llamado equals() que es usado para esta funcion.

Ejemplo:
Código PHP:
String nombreUno "Gonzalo";
String nombreDos "Nicolas";

//hago la comparacion
if(nombreUno.equals(nombreDos)) {
    
//aqui no llegariamos pues no son iguales
} else {
    
//estas vez entraria aqui pues los objetos son diferentes

__________________
se despide hasta la proxima
Gonzalo Castillo
  #5 (permalink)  
Antiguo 14/10/2004, 09:10
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
Tema: Java Configuracion
Pregunta: ¿Como seteo el PATH y para que sirve?
Respuesta:
Setear el PATH en tu maquina sirve para que esta sepa donde debe buscar los programas que no encuentra o desconoce.
Tener seteado en PATH de nustra maquina la ruta al \bin\ del JDK sirve para poder compilar y ejecutar nuestros programas Java desde la consola estando parados en cualquier directorio o disco local de nuestro PC, y no debemos llevar nuestros .java al \bin\ del JDK para compilalro y ejecutarlos.

Para setear nuestro path basta con abriri una sonsola (ventana DOS) o como prefieran llamarle y escribir esto

SET PATH = %PATH%;<RUTA_AL_BIN>

Donde <RUTA_AL_BIN> debes reemplazarlo pro la ruta completa a nuestro \bin\ del JDK, por ejemplo, en mi caso tengo instalado la version 1.4.2_03 del J2SE y se encuntra en la carpeta C:\j2sdk1.4.2_03\ entonces para setear mi PATH debo escribir esto

SET PATH = %PATH%;C:\j2sdk1.4.2_03\bin

el %PATH% significa que estoy agrenado ademas todas las rutas del PATH actual, es como decir en Java por ejemplo

String path = "algo";
path = path + "otro algo";

es decir, sirve para no perder lo que ya habia en el.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #6 (permalink)  
Antiguo 01/11/2004, 14:39
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
Tema: Configuracion
Pregunta: Por que no me funcionan las aplicaciones Java en mi winXP?
Respuesta:
La razon es pq al momento de salir al mercado windows XP, Microsoft tenia algunos problemas con SUN, la empresa propietaria de la tecnologia Java, por lo cual nustro tio decidio no colocar la Maquina Virtual de Java (JVM) en su nueva distribucion de windows, por ende, cualquier programa en Java no podria funcionar por el hecho de no existir dicha JVM.
Claro, luego los tribunales obligaron a M$ a volver a incluirla, pero lamentablemente la mayoria de las distribuciones que nos llegan son de la epoca en cuando esta no venia incluida.

Para solventar dicho problema debemos bajarnos la JVM o tambien conocida como J2RE desde el sitio oficial de SUN http://java.sun.com, cabe destacar que es completamente gratuita.
__________________
se despide hasta la proxima
Gonzalo Castillo
  #7 (permalink)  
Antiguo 13/03/2005, 18:06
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Base de datos MySQL
Pregunta Como puedo conectarme a MySQL
Respuesta Necesitas tener el driver JDBC que es el que se utiliza para hacer conecciones y query's a nuestra base de datos MySQL , puedes bajarlo desde aqui: http://www.mysql.com/products/connector/j/

Necesitas actualizar tu classpath, en el editor que estes usando o directamente desde la consola, una vez instalado correctamente, puedes usar este codigo para darte una idea.
Código:
import java.sql.*;

public class coneccionMySql
{
	static String bd = "myDataBase";
	static String login = "user";
	static String password = "mymegapassword";
	static String url = "jdbc:mysql://localhost/" + bd;
	
	
	public static void main(String[] args)throws Exception
	{
		Connection conn = null;
		try
		{
			//ESTABLECEMOS LA CONECCION
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection(url,login,password);
			
			if (conn != null)
			{
				System.out.println("Conexión a base de datos " + url + " ... Ok");
				
				//HACEMOS UNA CONSULTA
				Statement stmt = conn.createStatement();
				ResultSet res  = stmt.executeQuery("SELECT * FROM carreras");
				
				while(res.next())
				{
					String Id  = res.getString("Id");
					String Carrera   = res.getString("Carrera");
					String Facultad= res.getString("Facultad");
					
					System.out.println(Id +" \t "+Carrera+" \t "+Facultad);
				}
				
				res.close();
				stmt.close();
				conn.close(); 
			}
		}
		catch(SQLException ex)
		{
			System.out.println("\n\nHubo un error : "+ex);
		}
		catch(ClassNotFoundException ex)
		{
			System.out.println("\n\nHubo otro error!!, no se encontro el driver, revisa tu ClassPath :(\n");
			System.out.println(ex);
		}
		
	}
}

Última edición por stock; 08/02/2006 a las 21:29
  #8 (permalink)  
Antiguo 18/03/2005, 15:01
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Capturar desde el teclado en modo consola
Pregunta: Como puedo capturar caracteres desde el teclado en Java??
Respuesta: Las instrucciones System.in.read(); nos permite leer entradas desde el teclado en codigo ASCII, mediante un ciclo capturamos los caracteres introducidos hasta que se presione la tecla ENTER, almacenandolos en un STRING, ya despues, depende lo que necesitemos, lo caovertimos a Integer, Double, etc... basicamente es lo que hace la siguiente clase :)

Código:
import java.io.*;
import java.util.*;

public class MeterDatos
{

    public static String readLine()
    {
        char nextChar;
        String result = "";
        boolean done = false;

        while (!done)
        {
            nextChar = readChar();
            if (nextChar == '\n')
               done = true;
            else if (nextChar == '\r')
            {
                //Do nothing.
                //Next loop iteration will detect '\n'
            }
            else
               result = result + nextChar;
        }

        return result;
    }

    public static String readLineWord()
    {
        String inputString = null,
               result = null;
        boolean done = false;

        while(!done)
        {
            inputString = readLine();
            StringTokenizer wordSource =
                                new StringTokenizer(inputString);
            if (wordSource.hasMoreTokens())
            {
                result = wordSource.nextToken();
                done = true;
            }
            else
            {
                System.out.println("Your input is not correct. Your input must");
                System.out.println("contain at least one nonwhitespace character.");
                System.out.println("Please, try again. Enter input:");
           }
       }

       return result;
   }


    public static int readLineInt()
    {
        String inputString = null;
        int number = -9999;//To keep the compiler happy.
                              //Designed to look like a garbage value.
        boolean done = false;

        while (! done)
        {
            try
            {
                inputString = readLine();
                inputString = inputString.trim();
                number = (Integer.valueOf(inputString).intValue());
                done = true;
            }
            catch (NumberFormatException e)
            {
                System.out.println(
                                "Your input number is not correct.");
                System.out.println("Your input number must be");
                System.out.println("a whole number written as an");
                System.out.println("ordinary numeral, such as 42");
                System.out.println("Please, try again.");
                System.out.println("Enter a whole number:");
            }
        }

        return number;
    }


    public static long readLineLong()
    {
        String inputString = null;
        long number = -9999;//To keep the compiler happy.
                            //Designed to look like a garbage value.
        boolean done = false;

        while (! done)
        {
            try
            {
                inputString = readLine();
                inputString = inputString.trim();
                number = (Long.valueOf(inputString).longValue());
                done = true;
            }
            catch (NumberFormatException e)
            {
                System.out.println(
                                "Your input number is not correct.");
                System.out.println("Your input number must be");
                System.out.println("a whole number written as an");
                System.out.println("ordinary numeral, such as 42");
                System.out.println("Please, try again.");
                System.out.println("Enter a whole number:");
            }
       }

        return number;
    }


    public static double readLineDouble()
    {
        String inputString = null;
        double number = -9999;//To keep the compiler happy.
                              //Designed to look like a garbage value.
        boolean done = false;

        while (! done)
        {
            try
            {
                inputString = readLine();
                inputString = inputString.trim();
                number = (Double.valueOf(inputString).doubleValue());
                done = true;
            }
            catch (NumberFormatException e)
            {
                System.out.println(
                                "Your input number is not correct.");
                System.out.println("Your input number must be");
                System.out.println("an ordinary number either with");
                System.out.println("or without a decimal point,");
                System.out.println("such as 42 or 9.99");
                System.out.println("Please, try again.");
                System.out.println("Enter a whole number:");
            }
        }

        return number;
    }


    public static float readLineFloat()
    {
        String inputString = null;
        float number = -9999;//To keep the compiler happy.
                              //Designed to look like a garbage value.
        boolean done = false;

        while (! done)
        {
            try
            {
                inputString = readLine();
                inputString = inputString.trim();
                number = (Float.valueOf(inputString).floatValue());
                done = true;
            }
            catch (NumberFormatException e)
            {
                System.out.println(
                                "Your input number is not correct.");
                System.out.println("Your input number must be");
                System.out.println("an ordinary number either with");
                System.out.println("or without a decimal point,");
                System.out.println("such as 42 or 9.99");
                System.out.println("Please, try again.");
                System.out.println("Enter a whole number:");
            }
        }

        return number;
    }

    public static char readLineNonwhiteChar()
    {
        boolean done = false;
        String inputString = null;
        char nonWhite = ' ';//To keep the compiler happy.

        while (! done)
        {
            inputString = readLine();
            inputString = inputString.trim();
            if (inputString.length() == 0)
            {
                System.out.println(
                                "Your input is not correct.");
                System.out.println("Your input must contain at");
                System.out.println(
                              "least one nonwhitespace character.");
                System.out.println("Please, try again.");
                System.out.println("Enter input:");
            }
            else
            {
                nonWhite = (inputString.charAt(0));
                done = true;
            }
        }

        return nonWhite;
    }

    public static boolean readLineBoolean()
    {
        boolean done = false;
        String inputString = null;
        boolean result = false;//To keep the compiler happy.

        while (! done)
        {
            inputString = readLine();
            inputString = inputString.trim();
            if (inputString.equalsIgnoreCase("true")
                   || inputString.equalsIgnoreCase("t"))
            {
                result = true;
                done = true;
            }
            else if (inputString.equalsIgnoreCase("false")
                        || inputString.equalsIgnoreCase("f"))
            {
                result = false;
                done = true;
            }
            else
            {
                System.out.println(
                                "Your input number is not correct.");
                System.out.println("Your input number must be");
                System.out.println("one of the following:");
                System.out.println("the word true,");
                System.out.println("the word false,");
                System.out.println("the letter T,");
                System.out.println("or the letter F.");
                System.out.println("You may use either uppercase");
                System.out.println("or lowercase letters.");
                System.out.println("Please, try again.");
                System.out.println("Enter input:");
            }
         }

        return result;
    }

    public static char readChar()
    {
        int charAsInt = -1; //To keep the compiler happy
        try
        {
            charAsInt = System.in.read();
        }
        catch(IOException e)
        {
            System.out.println(e.getMessage());
            System.out.println("Fatal error. Ending Program.");
            System.exit(0);
        }

        return (char)charAsInt;
    }

    public static char readNonwhiteChar()
    {
      char next;

      next =  readChar();
      while (Character.isWhitespace(next))
          next =  readChar();

      return next;
    }

}
compila la clase, si lo notaste los metodos son de tipo "static", entonces, no es necesario creear objeto de esta clase, unicamente pon el archivo .class en la misma carpeta que tu aplicacion.

para usarla solamente seria asi:

String mytext = MeterDatos.readLine();
double myVar = MeterDatos.readLineDouble();
etc....

Última edición por stock; 18/03/2005 a las 15:08
  #9 (permalink)  
Antiguo 08/04/2005, 16:18
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Exception's
Pregunta: Como manejo las Exepciones y que son??
Respuesta: Las Exceptions son lanzadas por algunos metodos, y se lanzan cuando sucede algun error con el metodo, por ejemplo cuando una Base de Datos no se conecta correctamente o cuando no encuentra una tabla en la base de datos, etc.... los metodos lanzan exepciones que nos avisan que a ocurrido mal, cuando ocurre esto, tenemos 2 alternativas, Relanzarlas o Capturarlas, si las queremos relanzar pues no sabriamos que sucedio, en cambio si las capturamos podemos mostrar el error o mandar un mensaje en especifico.

Para relanzar las exeception unicamente le agregamos throws Exception al metodo.
Código PHP:
public class LanzarExceptions{
        public static 
void main(String arg[])throws Exception{
                
int num;
                
num Integer.parseInt(arg[0]);
                
System.out.println("El numero introducido es: " num);
        }

Para capturarlas usamos TRY,CATCH, FINALLY algo asi:
Código PHP:
public class CapturarExceptions{
     public static 
void main(String arg[]){
          
int num;
          try{
                
num Integer.parseInt(arg[0]);
                
System.out.println("El numero introducido es: " num);
          }catch(
Exception error){
                
System.out.println("El numero introducido no es valido, asegurate de que no contenga letras y que sea un numero entero. El error es: " error);
          }
           
finally{
                
//do nothing jejejeje :)
          
}
     }

Si te fijaste es mejor capturarlas y asi mostrar un mensaje con el error ocacionado.

-------- Agosto 15, 2006 -----------

Cabe mencionar que tambien podemos capturar diferentes errores, y desplegar diferentes mensajes o realizar otras cosas, dependiendo del error generado, en los ejemplos anteriores unicamente he puesto Exception, pero tembien existen clases que extienden de esta y que son mas especificas, como por ejemplo ClassNotFoundException, IOException,BadLocationException, etc... y todas estas heredan de la superclase Exception, ahora bien para capturar una por una lo hacemos asi:

Código PHP:
public class Capturar{
     public static 
void main(String arg[]){
          
int num;
          try{
                
num Integer.parseInt(arg[0]);
                
System.out.println("El numero introducido es: " num);
          }catch(
ArrayIndexOutOfBoundsException error){
                  
System.out.println("Es necesario pasar un numero como parametro.");
          }catch(
NumberFormatException e){
                  
System.out.println("La entrada "+arg[0]+" no es un numero!");
          }
finally{
                
//do nothing jejejeje :)
          
}
     }


-------- Febrero 8, 2006 -----------

Es importante mencionar que el bloque finally Siempre se ejecuta, independientemente de que se ocacione un error o no, esto es muy util cuando trabajamos con base de datos, pues nos aseguramos de cerrar la conexion a la DB y no dejarla abierta.

Última edición por stock; 15/08/2006 a las 16:14 Razón: Anotaciones extras
  #10 (permalink)  
Antiguo 11/04/2005, 19:54
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Archivos
Pregunta: Como puedo escribir y leer un archivo??
Respuesta: Para poder escribir o leer un archivo, usamos la clase FileWriter para escribir y FileReader para leer el contenido, despues creamos unos buffers para poder extraer el contenido o bien para escribir el contenido, tal y como se muestra en el codigo siguiente.

Código PHP:
import java.io.*;

public class 
Insertar{
    public static 
String Archivo;
    
    
Insertar(String arch){
        
this.Archivo arch;
    }
    
    public static 
void Escribir(String datos){
        try
        {
            
FileWriter fw = new FileWriter(Archivo,true);
            
BufferedWriter bw = new BufferedWriter(fw);
            
PrintWriter escritor = new PrintWriter(bw);
            
escritor.println(datos);
            
escritor.close ();
        }
        catch(
Exception e)
        {
            
System.out.println("\n\nError: " e);
        }
    }
    
    public static 
String Leer(){
        
String texto;
        
String txt = new String();
        try{
            
FileReader fr = new FileReader(Archivo);
            
BufferedReader lector = new BufferedReader(fr);
            
texto lector.readLine();
            while(
texto != null)
            {
                
txt txt.concat(texto);
                
texto lector.readLine();
            }
            
lector.close ();
        }catch(
Exception err){
            
System.out.println("Error: " err);
        }
        return 
txt;
    }
    
    public static 
void main(String cvr[]){
        
Insertar arch = new Insertar("myarchivo.txt");
        
arch.Escribir("Hey que ondas??");
        
System.out.println(arch.Leer());
    }

  #11 (permalink)  
Antiguo 22/04/2005, 09:42
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Socket's
Pregunta: Como hagouna conexion UDP ??
Respuesta: Una conexion UDP es para establecer una comunicacion, no es necesario establecer una conexion entre las dos maquinas para enviar el mensage, la maquina puede enviar el mensage y no se serciora de que halla llegado, solo lo envia a una IP especificada y si esa IP estaba escuchando el puerto, entonces llegara correctamente el mensage, sino el paquete se perdera, el siguiente ejemplo es un Chat en modo consola:

Código PHP:
/*
* Author: Crysfel Villa
* Created: Friday, April 22, 2005 9:40:46 AM
* Modified: Friday, April 22, 2005 9:40:46 AM
*/

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetSocketAddress;
import java.net.InetAddress;

public class 
Chat extends Thread
{
  static 
DatagramSocket ds=null;
  static 
InetAddress ia=null;
  static 
int puerto 1020;
  static 
String maxCadena null;
  static 
String usuario;
    
  static 
void conectar()
  {
    try
    {
      
InetSocketAddress isa=new InetSocketAddress("123.14.254.124",puerto);
      
ia isa.getAddress();
      
ds = new DatagramSocket(puerto);
      
System.out.println("Socket conectado!");
    }
    catch(
Exception e)
    {
      
System.out.println("Error al conectar\n"+e);
    }
  }
  
  static 
void enviar(String cadena)
  {
    
byte enviar[];
    
int longitud cadena.length();
    
enviar cadena.getBytes();
    try
    {
      
DatagramPacket dp = new DatagramPacket(enviar,longitud,ia,puerto);
      
ds.send(dp);
      
System.out.println(cadena);
    }
    catch(
Exception e)
    {
      
System.out.println("Error al enviar mensaje\n"+e);
    }
  }
  
  static 
void recibir()
  {
    
byte nada[] = maxCadena.getBytes();
    
DatagramPacket dp = new DatagramPacket(nada,maxCadena.length());
    try
    {
      while (
true)
      {
        
ds.receive(dp);
        if (
dp!=null)
        {
          
nada dp.getData();
          for (
int m=0m<=nada.length-1m++)
            
System.out.print((char)nada[m]);
          
System.out.println();
          break;
        }
      }
    }
    catch(
Exception e)
    {
      
System.out.println("Error al recibir mensaje\n"+e);
    }
  }
  
  static 
void cerrar()
  {
    
ds.close();
    
System.out.println("Socket cerrado!");
  }
  
  public static 
void main(String a[])
  {
    
maxCadena = new String("                                                                                                               "+
        
"                                                                                                                                  ");
    
String msg "";
    
conectar();
    
usuario a[0];
    
enviar(usuario " Esta On-Line");
    do{
        
recibir();
        
System.out.print("-> ");
        
msg MeterDatos.readLine();
        if(
msg.equals("exit"))
            break;
        else
            
enviar(usuario " Said: " msg);
    }while(
true);
    
cerrar();
  }

  #12 (permalink)  
Antiguo 22/04/2005, 10:13
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Socket's
Pregunta: como hago una conexion TCP ??
Respuesta: Una conexion TCP necesita establecer primeramente la conexion entre el cliente y el servidor, donde el servidor estara corriendo y escuchando a un determinado puerto al que el cliente se conectara, cuando la conexion se establece correctamente entonces el cliente manda un mensage y el servidor le responde deacuerdo a lo que halla recibido, Este es un ejemplo muy simple de una coneccion TCP:

El Servidor:
Código PHP:
/*
 * Author: Cryfel Villa
 * Created: sábado, 17 de julio de 2004 6:26:35
 * Modified: sábado, 17 de julio de 2004 6:26:35
 */

import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.BufferedOutputStream;

public class 
Servidor extends Thread
{
  
ServerSocket server;
  public 
Servidor()
  {
    
//MANDAMOS LLAMAR AL CONSTRUCTOR DE LA CLASE "Thread" QUIEN ES LA
    //SUPERCLASE DE ESTA CLASE, ASI NOSOTROS CREAMOS LOS HILOS Y DEMAS COSAS
    //LE MANDAMOS UN IDENTIFICADOR EN ESTE CASO "Servidor" PUEDE SER CUALQUIER COSA
    
super("Servidor");
    try
    {
      
//CREAMOS EL SOCKET DEL SERVIDOR
      
server=new ServerSocket(2002);
      
System.out.println("Servidor corriendo...");
    }
    catch(
Exception e)
    {
      
System.out.println("Error al correr el servidor\n"+e);
      
System.exit(1);
    }
  }
  
  public 
void run()
  {
    
Socket client=null;
    while (
true)
    {
      if (
server==null)
        return;
      try
      {
        
//ESPERA A QUE LLEGUE ALGO
        
client=server.accept();
        
System.out.println("Llegó un cliente!");
      }
      catch(
Exception e)
      {
        
System.out.println("No se pudo conectar con el cliente\n"+e);
        
System.exit(1);
      }
      try
      {
        
InputStreamReader isr=new InputStreamReader(client.getInputStream());
        
BufferedReader is=new BufferedReader(isr);
        
PrintWriter os=new PrintWriter(new BufferedOutputStream(client.getOutputStream()),true);
        
String inStr;
        
//IMPRIMOMOS EL MENSAJE Y HACEMOS
                // TODO LO QUE QUERRAMOS HACER CUANDO LLEGUE UNA PETICION
               //EN ESTE CASO NADAMAS IMPRIMIMOS EL MENSAJE RECIVIDO
              //EN LA CONSOLA PERO PUEDES HACER CUALQUIER OTRA COSA
        
while ((inStr=is.readLine())!=null)
        {
          
System.out.println("Cliente: "+inStr);
          
os.println("Hey, cliente, mensaje recibido");
          
os.println("bye");
        }
      }
      catch(
Exception e)
      {
        
System.out.println("Error: "+e);
      }
        }
  }
  
    public static 
void main(String a[])
    {
    
Servidor servidor=new Servidor();
    
servidor.run();
    }

Este es el Cliente
Código PHP:
/*
 * Author: Crysfel Villa
 * Created: sábado, 17 de julio de 2004 6:48:26
 * Modified: sábado, 17 de julio de 2004 6:48:26
 */

import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;

public class 
Cliente
{
    public static 
void main(String a[])
  {
    
Socket socket=null;
    
InputStreamReader isr=null;
    
BufferedReader in=null;
    
PrintWriter out=null;
    try
    {
      
socket=new Socket("192.168.0.1",2002);
      
isr=new InputStreamReader(socket.getInputStream());
      
in=new BufferedReader(isr);
      
out=new PrintWriter(socket.getOutputStream(),true);
    }
    catch(
Exception e)
    {
      
System.out.println("No se pudo crear la conexión\n"+e);
    }
    try
    {
      
StringBuffer str=new StringBuffer(128);
      
String inStr;
      
int c;
      
out.println("Hey, server...");
      
socket.sendUrgentData(100);
      while ((
inStr=in.readLine())!=null)
      {
        
System.out.println("Servidor: "+inStr);
        if (
inStr.equals("bye"))
          break;
        while ((
c=System.in.read())!='\n')
          
str.append((char)c);
        
System.out.println("Cliente: "+str);
        
out.println(str.toString());
        
out.flush();
        
str.setLength(0);
      }
      
out.close();
      
in.close();
      
socket.close();
    }
    catch(
Exception e)
    {
      
System.out.println("Error al enviar mensaje\n"+e);
    }
  }


Última edición por stock; 09/06/2005 a las 11:51
  #13 (permalink)  
Antiguo 22/04/2005, 14:47
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Seguridad
Pregunta: Algun algoritmo para encriptar passwords??
Respuesta: Existen varios algoritmos para encriptar passwords o algun otro texto, el siguiente codigo es el Blowfish, con este podemos encriptar y desencriptar passwords, es muy rapido y seguro unicamente especificamos una KEY, para encriptar, y para desencriptar usamos la misma KEY con la que encriptamos.

Código PHP:


import java
.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.spec.*;

import java.io.*;

public class 
Blowfish {


    public static 
String encriptar(String cleartextString key)
            
throws Exception {
        return 
crypt(cleartextkeyCipher.ENCRYPT_MODE);    
    }

 
    public static 
String desEncriptar(String ciphertextString key)
            
throws Exception {
        return 
crypt(ciphertextkeyCipher.DECRYPT_MODE);    
    }

    private static 
String crypt(String inputString keyint mode
            
throws Exception {

        
// Install SunJCE provider
        
Provider sunJce = new com.sun.crypto.provider.SunJCE();
        
Security.addProvider(sunJce);
         
        
KeyGenerator kgen KeyGenerator.getInstance("Blowfish");
        
kgen.init(448);
        
SecretKey skey kgen.generateKey();

        
byte[] raw key.getBytes();
        
SecretKeySpec skeySpec = new SecretKeySpec(raw"Blowfish");
            
        
Cipher cipher Cipher.getInstance("Blowfish/ECB/PKCS5Padding");
        
cipher.init(modeskeySpec);

        
ByteArrayOutputStream bos = new ByteArrayOutputStream();
        
ByteArrayInputStream bis = new ByteArrayInputStream(input.getBytes());
        
CipherOutputStream cos = new CipherOutputStream(boscipher);

        
int length 0;
        
byte[] buffer =  new byte[8192];

        while ((
length bis.read(buffer)) != -1) {
           
cos.write(buffer0length);
        }

        
bis.close();
        
cos.close();

        return 
bos.toString();
    }

Para usarlo unicamente necesitas importar la clase (si esta dentro de un paquete) o poner el archivo en el mismo directorio que tu aplicacion, no necesitas intanciar la clase, pues es STATIC, entonces unicamente harias esto:

String txtEncriptado = Blowfish.encriptar("mipassword","estaeslallave");

Última edición por stock; 29/06/2005 a las 00:15
  #14 (permalink)  
Antiguo 01/05/2005, 17:43
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Seguridad
Pregunta: Algun otro algoritmo para encriptar??
Respuesta: Un algoritmo mas es el MD5 este algoritmo unicamente encripta, osea que una vez encriptado no puedes desencriptarlo, este algoritmo es muy usado para encriptar passwords de usuarios por ser muy seguro, a continuacion la clase para encriptar con MD5

Código PHP:
import java.security.MessageDigest;

public class 
Md5{

    
/**
     * Encripta un String con el algoritmo MD5.
     * @return String
     * @throws Exception
     */
    
private static String hash(String clearthrows Exception {
        
MessageDigest md MessageDigest.getInstance("MD5");
        
byte[] md.digest(clear.getBytes());

        
int size b.length;
        
StringBuffer h = new StringBuffer(size);
        for (
int i 0sizei++) {
            
int u b[i]&255// unsigned conversion
            
if (u<16) {
                
h.append("0"+Integer.toHexString(u));
            } else {
                
h.append(Integer.toHexString(u));
            }
        }
        return 
h.toString();
    }

    
/**
     * Encripta un String con el algoritmo MD5.
     * @return String
     * @throws Exception
     */
    
public static String encriptar(String palabra)throws Exception {
        
String pe="";
        try {
            
pe hash(palabra);
        } catch (
Exception e) {
            throw new 
Error("<strong>Error: Al encriptar el password</strong>");    
        }
        return 
pe;
    }

  #15 (permalink)  
Antiguo 01/05/2005, 18:00
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Wrappers
Pregunta: que son los wrappers y para que sirven??
Respuesta:

Mediante los Wrapper's se puede manipular los tipo de datos nativos de java como Objetos, usando metodos definidos para cada Wrapper.

Nativo Wrapper

int -> Integer
char -> Character
byte -> Byte
float -> Float
double -> Double
short -> Short
long -> Long

la forma de declararlos o mejor dicho instanciarlos es exactamente igual como cualquier otro objeto, ejemplo:

Integer num = new Integer("12456");
Double dNum = new Double("1234.3456");

instanciando estos objetos ahora podemos usar los metodos que estos contienen como por ejemplo para comparar dos enteros seria asi
Código PHP:
Integer num1 = new Integer("12456");
Integer num2 = new Integer("12456");
if ( 
num1.equals(num2) ){
      
System.out.println("Ok, si son iguales");
}else{
      
System.out.println("son diferentes");

recomiendo le des una mirada al API para que veas que metodos contienen cada uno de estos objetos.

http://java.sun.com/j2se/1.5.0/docs/...age-frame.html

cabe mencionar que los String's son wrappers u objetos :)
  #16 (permalink)  
Antiguo 10/05/2005, 22:43
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Pregunta: Como puedo saber la fecha del sistema??
Respuesta: usamos la clase Date para optener la fecha actual del sistema, luego con la clase SimpleDateFormat le especificamos en que formato queremos la fecha, y despues simplemente la imprimimos.

Código PHP:
    import java.text.SimpleDateFormat;
    
import java.util.Date;

    public class 
Fecha{
         public static 
void main(String cvr[]){
             
Date fecha=new Date();
             
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
             
System.out.println("La fecha de hoy es:" sdf.format(fecha));
        }
    } 
  #17 (permalink)  
Antiguo 10/05/2005, 22:55
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Net
Pregunta: Como puedo hacer una peticion a un servidor HTTP??
Respuesta: la clase URL nos permitira hacer esto, primero la instanciamos pasandole un String con la direccion donde queremos recibir el contenido ej: http://www.yahoo.com despues abrimos un Stream, creamos un StreamReder para instanciar a un BufferReader que sera el que recibira la respuesta del servidor.

Código PHP:
//@autor Crysfel Villa
//Esta clase hace una peticion a un servidor WEB el 
//cual regresa su contenido como un String (HTML)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class 
LoaderModulo
{
    public 
LoaderModulo(){
        
//do nothing :)
    
}
    public 
String loadModulo(String sitio){
        
StringBuffer tmp = new StringBuffer();
        
String texto = new String();
        try {
            
// Crea la URL con del sitio introducido, ej: http://google.com
            
URL url = new URL(sitio);
    
            
// Lector para la respuesta del servidor
            
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            
String str;
            while ((
str in.readLine()) != null) {
                
tmp.append(str);
            }
            
in.close();
            
texto tmp.toString();
        }catch (
MalformedURLException e) {
            
texto "<h2>No esta correcta la URL</h2>".toString();
        } catch (
IOException e) {
            
texto "<h2>Error: No se encontro el l pagina solicitada".toString();
            }
        return 
texto;
    }

forma de uso, poner estas linias en el MAIN() o bien en un JSP o en alguna clase o donde la necesites :)
Código PHP:
     LoaderModulo web = new LoaderModulo();
     
System.out.println(web.loadModulo("http://www.yahoo.com")); 

Última edición por stock; 08/06/2005 a las 20:11 Razón: Anotaciones Extras
  #18 (permalink)  
Antiguo 31/05/2005, 17:51
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Fechas
Pregunta: Como obtener la fecha del sistema??
Respuesta: Con la clase Date obtenemos la fecha actual del sistema

Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Thursday, May 26, 2005 7:55:39 PM
 * Modified: Thursday, May 26, 2005 7:55:39 PM
 */
import java.util.*;
import java.text.*;

public class 
Fecha
{
    private 
Date hoy;
    private 
SimpleDateFormat sdf;
    private 
int dia;
    private 
int mes;
    private 
int year;
    
    public 
Fecha(){
        
String fecha "";
        
hoy = new Date();
        
sdf = new SimpleDateFormat("dd-MM-yyyy");
        
fecha sdf.format(hoy);
        
dia Integer.parseInt(fecha.substring(0,2));
        
mes Integer.parseInt(fecha.substring(3,5));
        
year Integer.parseInt(fecha.substring(6));
    }
    
    
/* 
    / @return La fecha actual del sistema en formato 01/Enero/2005
    */
    
public String getFecha(){
        return 
dia "/" getMes(mes) + "/" year;
    }
    
    
/* 
    / @return La fecha actual del sistema y la hora en formato 01/Enero/2005 10:35
    */
    
public String getFechaTime(){
        return 
dia "/" getMes(mes) + "/" year " " hoy.getHours()+ ":" hoy.getMinutes();
    }
    
    
/* 
    / @param int mes
    / @return El mes en String
    */
    
private String getMes(int m){
        
String mes="";
        switch(
m){
        case 
mes="Enero"; break;
        case 
mes="Febrero"; break;
        case 
mes="Marzo"; break;
        case 
mes="Abril"; break;
        case 
mes="Mayo"; break;
        case 
mes="Junio"; break;
        case 
mes="Julio"; break;
        case 
mes="Agosto"; break;
        case 
mes="Septiembre"; break;
        case 
10 mes="Octubre"; break;
        case 
11 mes="Noviembre"; break;
        case 
12 mes="Diciembre"; break;
        }
        return 
mes;
    }

  #19 (permalink)  
Antiguo 01/06/2005, 05:53
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 12 años, 6 meses
Puntos: 1
Tema: Fechas
Pregunta: Como obtener la fecha del sistema??
Respuesta: Con la clase Calendar obtenemos la fecha actual del sistema

Código PHP:

import java
.util.*;

public class 
Fecha{

public 
void main(String args[])
{
Calendar c Calendar.getInstance();
int dia c.get(Calendar.DAY_OF_MONTH);
int mes c.get(Calendar.MONTH)+1;
int anyo c.get(Calendar.YEAR);

System.out.println("hoy es:  "+dia+"/"+mes+"/"+anyo);


}

__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #20 (permalink)  
Antiguo 06/06/2005, 11:24
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: DataBase's
Pregunta: Como conectarse usando ODBC ??
Respuesta: Primero necesitas crear un DSN, las conexiones ODBC son mas lentas que las JDBC, pero si quieres conectarte con ODBC, primero creamos un DSN, vamos a Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC) y en la pestaña user DSN presionas el boton ADD... y seleccionas el tipo de base de datos a usar, en este caso ACCESS, luego seleccionas el URL donde esta hubicada tu DB, presionas OK, OK, OK hasta que tremines de cerrar todas las ventanitas que se habrieron :)

luego este es codigo necesario para hacer la conexion:
Código PHP:
import java.sql.*;

public class 
EjemplDB1{
    public static 
void mainString [] args )
    {
        try
        {
            Class.
forName("sun.jdbc.odbc.JdbcOdbcDriver");
            
Connection cn DriverManager.getConnection("jdbc:odbc:NombreDelDSN");
            
Statement st cn.createStatement();
            
ResultSet datos st.executeQuery("Select * from AlgunaTabla");
            while(
datos.next()){
                
System.out.println("Campo1: " datos.getString("Campo1"));
            }
            
cn.close();
        }
        catch(
Exception e)
        {
            
System.out.println("Error en la DB: " e);
        }
    }
// end main


Última edición por stock; 08/06/2005 a las 20:14
  #21 (permalink)  
Antiguo 10/06/2005, 17:12
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Package's
Pregunta: Que son los Paquetes??
Respuesta: Cuando desarrollamos algun proyecto generalmente es necesario crear paquetes para tener una buena organizacion del proyeto y sea facil de mantener y entender, los paquetes nos sirven para agrupar clases que generalmente usamos en nuestros sistemas.

JAVA cuenta con muchos paquetes como por ejemplo java.util.* donde encontramos muchas utilerias, java.lang.* donde estan los wrappers y algunas cosas mas....

puedes ver todos los paquetes disponibles en el API de JAVA en esta direccion

http://java.sun.com/j2se/1.3/docs/api/

Fisicamente los paquetes son carpetas donde se encuentran nuestras clases asi si creamos un paquete llamado primerpaquete la crpeta que contenga las clases tambien se llamara asi, si usas eclipse, entonces eclipse las crea por ti.

ahora ya que creamos nuestros paquetes creamos nuestras clases donde en la primera linia de esta clase debe tener esta intruccion:

package nombredelpaquete;

luego ya programamos todo lo que querramos, y guardamos esta clase dentro de la carpeta que en este caso se llamara nombredelpaquete.

OK, ahora ya que tenemos nuestras clases en sus respectivas carpetas necesitamos decirle al compilador donde estan nuestros paquetes, para ello necesitamos modificar los classpath. Para hacerlo depende del editor que uses o bien desde la consola unicamnete asi:

javac -classpath .;c:\uso\afq\classes;c:\proyeto1\paquetes\

y estara listo, luego en nuestras clases llamamos nuestros paquetes asi:

import nombredelpaquete.*;

El uso de paquetes es muy frecuente en aplicaciones de J2EE donde usamos sevlets, clases, JSP's en estos casos nuestros paquetes tienen que estar aqui:

WEB-INF/clases/

ahi es donde estaran todos nuestros paquetes :)

Última edición por stock; 10/06/2005 a las 17:18
  #22 (permalink)  
Antiguo 14/06/2005, 22:08
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Estructura de datos
Pregunta: Que es una Pila(Stack) y como hacerla en JAVA??
Respuesta: Ok, una pila es una estructura de datos la cual consta de dos métodos uno denominado PUSH y otro llamado POP.

El primer método (push) es con el que insertaremos nodos a la pila, una pila se construye como una torre, los primeros "bloques" (nodos) que agregamos serán los últimos en ser quitados, ósea que vamos ir quitando el que este en la cima, o el ultimo en ser agregado!! por Ejemplo

8 -> 3 -> 7 -> 2 -> 9 -> 4 -> null
^
Raiz
(root)

en ese ejemplo el primer elemento en ser agregado fue el 8 y el ultimo fue el 4, si quisiéramos agregar otro elemento a la pila seguiría después del 4. Pero si queremos sacar un elemento, el único que podemos sacar para este caso es el 4 y nuestra pila quedaría así:

8 -> 3 -> 7 -> 2 -> 9 -> null
^
Raiz
(root)

Ok, ahora bien teniendo claramente el concepto de PILA, pasemos a JAVA, vamos a crear una clase llamada NODO el cual va a contener el un entero y un "puntero" al siguiente nodo o elemento de la pila nuestro ejemplo anterior contiene 5 nodos. la clase quedaría algo así:

Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Tuesday, June 14, 2005 7:41:24 PM
 * Modified: Tuesday, June 14, 2005 7:41:24 PM
 */
public class Nodo{
    public 
Nodo ptr;
    public 
int contenido;
    
    public 
Nodo(int c){
        
contenido c;
        
ptr null;
    }

Ahora vamos a hacer la clase de la PILA, esta clase va a contener 3 metodos, PUSH, POP y PRINT, ademas contendra un puntero al primer elemento de la pila al que llamaremos “root”, el codigo queria algo asi:

Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Tuesday, June 14, 2005 7:45:10 PM
 * Modified: Tuesday, June 14, 2005 7:45:10 PM
 */
public class Pila
{
    
//PUNTERO AL PRIMER ELEMENTO DE LA PILA
private Nodo root;
    
    
//CONSTRUCTOR
    
public Pila(){
        
root null;
    }
    
    
//METODO PARA AGREGAR UN ELEMENTO A LA PILA
    
public void push(int num){
        
Nodo ptrTmp root;
        
Nodo contenido = new Nodo(num);
        if(
ptrTmp == null){
            
root contenido;
        }else{
            while(
ptrTmp.ptr != null)
                
ptrTmp ptrTmp.ptr;
            
ptrTmp.ptr contenido;
        }
    }

    
//METODO QUE REGRESA EL ELEMENTO DE LA CIMA DE LA PILA
    
public int pop(){
        
Nodo ptrTmp root;
        
Nodo ptrPenultimo root;
        
int num 0;
        if(
ptrTmp == null){
            return 
0;
        }else if(
root.ptr != null){
                while(
ptrTmp.ptr != null)
                    
ptrTmp ptrTmp.ptr;
                while(
ptrPenultimo.ptr != ptrTmp)
                    
ptrPenultimo ptrPenultimo.ptr;
                
                
num ptrTmp.contenido;
                
ptrPenultimo.ptr null;
            }else{
                
num root.contenido;
                
root null;
            }
        return 
num;
    }
    
    
//METODO PARA IMPRIMIR LA PILA
    
public void print(){
        
Nodo ptrTmp root;
        if(
ptrTmp != null){
            while(
ptrTmp.ptr != null){
                
System.out.print(" [ " ptrTmp.contenido " ] ");
                
ptrTmp ptrTmp.ptr;
            }
            
System.out.print(" [ " ptrTmp.contenido " ] ");
        }
    }

Ahora solo nos falta hacer la aplicación que use esta clase, haré unos cuantos PUSH imprimo la lista luego un POP la imprimo de nuevo:

Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Tuesday, June 14, 2005 7:58:02 PM
 * Modified: Tuesday, June 14, 2005 7:58:02 PM
 */
public class appPila{
    public static 
void mainString [] args )
    {
        
Pila pila = new Pila();
        
        for(
int i=0;i<10;i++)
            
pila.push((int)(Math.random()*10)+1);
        
        
pila.print();
        
System.out.println();
        
pila.pop();
        
pila.print();
    }

Ahora si ya tenemos lista nuestra alicacion usando una pila dinamica, puedes insertar N cantidad de nodos.

Tambien podemos aplicar el concepto de PILA usando arreglos, pero estariamos limitados a un numer N, en cambio esta aplicacion que acabamos de hacer no tenemos limite alguno :)

Pues bien esto a sido todo por ahora!! Espero que me halla explicado bien!! Hasta la proxima!!

Última edición por stock; 15/06/2005 a las 09:50 Razón: Comentarios Extras
  #23 (permalink)  
Antiguo 20/07/2005, 13:29
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema : Estructura de datos
Pregunta que es una cola??
Respuesta : Una Cola es una estructura de datos de tipo FIFO (First In First Out) ósea que el primero que llega es el primero que sale. Tiene un método para agregar a la cola PUSH y otro para sacar de la cola POP.

El concepto de cola es muy sencillo y seguramente tu ya lo sabes, pro ejemplo cuando hacemos una cola para comprar boletos en el estadio, te formas y esperas tu turno, es igual con esta estructura.

2 -> 8 -> 1 -> 5 -> 3 -> 9 ->Null
^
Root

En el ejemplo anterior el primer numero en llegar fue el 2, y el ultimo el 9, si quisiéramos introducir otro elemento a la cola tendría que ir detrás del 9, ahora bien tomando en cuenta el concepto de cola si queremos sacar un elemento, forzosamente es el 2 y la cola quedaría así:

8 -> 1 -> 5 -> 3 -> 9 ->Null
^
Root

Ok, una vez comprendido el concepto, pasemos con JAVA !! lo que vamos a ahcer es crear 3 archivos en la misma carpeta (para no hacer paquetes), Nodo.java, Cola.java e Implementa.java.

Nodo.java esta clase es donde almacenaremos los umeros y el puntero o referencia al siguiente NODO:
Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Wednesday, July 20, 2005 12:58:26 PM
 * Modified: Wednesday, July 20, 2005 12:58:26 PM
 */

public class Nodo{
    public 
int value;
    public 
Nodo ptr;
    
    public 
Nodo(int v){
        
value v;
        
ptr null;
    }

Cola.java Esta clase es la que forma la cola
Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Wednesday, July 20, 2005 12:58:26 PM
 * Modified: Wednesday, July 20, 2005 12:58:26 PM
 */

public class Cola
{
    
//PUNTERO RAIZ
    
private Nodo root;
    
    
//CONTRUCTOR
    
public Cola(){
        
//CUANDO SE CREA ESTA VACIO
        
root null;
    }
    
    
//METODO PARA AGREGAR UN ELEMENTO A LA COLA
    
public void push(int num){
        
Nodo newNodo = new Nodo(num);
        
        
//SI ESTA VACIO
        
if(root == null){
            
//LE ASIGNAMOS EL PRIMER NODO
            
root newNodo;
        }else{
            
//SI CONTIENE ALGO NOS TENEMOS QUE RECORRER HASTA EL FINAL
            
Nodo ptrTem root;
            
//CON ESTE CICLO LLEGAMOS AL FINAL DE LA COLA
            
while(ptrTem.ptr != null)
                
ptrTem ptrTem.ptr;
            
//YA EN EL FINAL LO INSERTAMOS AHI
            
ptrTem.ptr newNodo;
            
        }
    }
    
    
//METODO PARA EXTRAER UN ELEMENTO DE LA COLA
    
public int pop(){
        
int valor = -12345;
        
//SI NO ESTA VACIA LA COLA
        
if(root!=null){
            
//TOMAMOS EL VALOR DEL PRIMER ELEMENTO
            
valor root.value;
            
//NOS MOVEMOS AL SIGUIENTE
            
root root.ptr;
        }else{
            
System.out.println("La cola esta vacia :(");
        }
        return 
valor;
    }
    
    
//CON ESTE METODO IMPRIMIMOS LA COLA COMPLETA
    
public void print(){
        if(
root == null){
            
System.out.println("La cola esta vacia");
        }else{
            
Nodo ptrTem root;
            while(
ptrTem.ptr != null){
                
ptrTem ptrTem.ptr;
                
System.out.print("[ "+ptrTem.value+" ]-> ");
            }
            
System.out.print("[ "+ptrTem.value+" ]-> \n");
        }
    }

Implementa.java Esta es la aplicacion que utiliza una cola dinamica
Código PHP:
/*
 * Author: Crysfel Villa
 * Created: Wednesday, July 20, 2005 12:58:26 PM
 * Modified: Wednesday, July 20, 2005 12:58:26 PM
 */

public class Implementa{
    public static 
void mainString [] args )
    {
        
Cola cola = new Cola();
        
        for(
int i=0;i<10;i++)
            
cola.push((int)(Math.random()*10)+1);
        
        
cola.print();
        
System.out.println();
        
cola.pop();
        
cola.pop();
        
cola.pop();
        
cola.print();
    }

Ok, espero halla quedado claro el concepto de cola, y espero que a alguien le pueda servir

have funn
  #24 (permalink)  
Antiguo 19/09/2005, 15:37
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 15 años, 5 meses
Puntos: 10
Tema: Servlets/JSP - Sessiones
Pregunta: ¿Por que el identificador de session funciona en algunos navegadores y en otros no? ¿Como evito que la session se maneje con cookies si el usuario no las acepta?
Respuesta:
El motor de servlets intenta utilizar cookies para seguir la traza de ID de session.
En la respuesta HTTP escrita por un servlet que creó una session se encuentra una cabecera Set-Cookie con el ID de session en una cookie llama JSESSIONID

Set-Cokkie: JSESSIONID=rkbg6z27j1;Path=/jspr

Si el cliente acepta la cookie, luego la devuelve en las peticiones posteriores:

Cookie: JSESSIONID=rkbg6z27j1

Si esto ocurre, la petición del cliente puede ser asociada a la session sin más consideraciones por parte del servlet. Pero si el cliente no acepta las cookies, se pierde la session. Para evitar esto, la API del servlet tiene un mecanismo de retirada (fallback). Si fallan las cookies, utiliza la reescritura de URL. Esto es un poco más complicado para el programador por que significa que todas las direcciones URL escritas por el servlet deben llevar añadido el ID de session.
Pero como esto es innecesario y costoso si el cliente acepta las cookies, la reescritura de URL debe realizarse sólo si se sabe a ciencia cierta que el método de las cookies falla. Afortunadamente, la API del servlet tiene métodos que encapsulan toda esta lógica. La clase HttpServletResponse tiene los métodos encodeURL() y encodeRedirectURL(), que añaden el ID de session a una dirección URL sólo si es necesario:

String miURL = response.encodeURL("/servlet/nextServlet");
out.println("Haz clic <a href='" + miURL + "'> AQUI</a> para continuar");

Debe utilizarse encodeRedirectURL() con todas las direcciones URL pasadas al método response.sendRedirect() y encodeURL() con todas las demás.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #25 (permalink)  
Antiguo 17/10/2005, 00:21
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Estructura de datos

Pregunta: Que son y como se comen las Lista dinámicas simples??

Respuesta: Ok, pongo este FAQ para beneficio de todos!! Una lista simple es una estructura de datos donde los elementos de esta están enlazados en forma secuencial, a diferencia de las pilas y las colas, puedes acceder a cualquier elemento de la lista. Para agregar nuevos elementos ala lista hay diferentes maneras, por ejemplo puedes agregar un elemento al final o al principio de la lista, o también siguiendo un orden ascendente o descendente de los elementos, en fin, eso depende de lo que necesites hacer con las listas, el criterio de acceso también es de acuerdo a las necesidades.



Lo que haremos en esta ocasión será hacer una lista con la opción de agregar nodos al final, podremos sacar los nodos dándole el numero de nodo que querremos sacar, un método para imprimir la lista, un método que nos dirá cuantos nodos tenemos, un método que eliminara un nodo de la lista.



OK, aquí los métodos:

add(Nodo nodo) -> Agrega nodos al final de la lista
get(int index) -> Obtener el nodo de acuerdo al indice requerido
size() -> nos dira el numero de nodos que hay en la lista
print() -> imprimira la lista
remove(int index) -> Eliminara un nodo de la lista


Ok, nuestra lista será algo asi:

7 -> 2-> 5 ->1 -> null
^
Root

Si queremos agregar el número 10, la lista quedaría así:


7 -> 2-> 5 ->1 -> 10 -> null
^
Root

Ok, pasemos a JAVA, vamos a lista con información de clientes. Aquí el Nodo.java

Código PHP:
/*
* Author: Crysfel Villa
* Created: Sunday, October 17, 2005 11:20:45 PM
* Modified: Sunday, October 17, 2005 11:20:45 PM
*/ 


public class Nodo{
    
//puntero al siguiente nodo
    
public Nodo ptr;
    
// puedes poner todos los datos que quieras
    
public String nombre;
    public 
String apellido;
    public 
int edad;
    
//constructor por default es NULL, porque sera el ultimo de la lista
    
public Nodo(){
        
ptr null;
    }



OK, ahora hagamos la lista.java

Código PHP:


/*
* Author: Crysfel Villa
* Created: Sunday, October 17, 2005 11:30:26 PM
* Modified: Sunday, October 17, 2005 11:30:26 PM
*/ 

public class Lista{
    
//el puntero al primer elemento
    
private Nodo root;
    
//el total de nodos en la lista
    
private int numNodos;

    
//el constructor inicializa las variables
    
public Lista(){
        
root null;
        
numNodos 0;
    }

    
//Agrega un nodo a la lista
    
public void add(Nodo newNodo){
        
//puntero temporal para recorreme en la lista
        
Nodo tmp root;

        
//si la lista esta vacia
        
if(tmp==null){
            
//lo agregamos al root
            
root newNodo;
        }else{
            
//de lo contrario nos recorremos hasta el ultimo
            
while(tmp.ptr!=null)
                
tmp tmp.ptr;
            
//en el ultimo hacemos el enlace 
            
tmp.ptr newNodo;
        }
        
//incrementamos el numero de nodos
        
numNodos++;
    }
    
    
//regresa un nodo dela lista deacuerdo al indice dado
    
public Nodo get(int index){
        
Nodo info null;
        
//revisamos que el indice este dentro del rango
        
if(index numNodos && index >= 0){
            
//puntero para recorrenos desde el principio hasta el indice
            
Nodo tmp root;
            
//revisamos que la lista no este vacia
            
if(tmp==null)
                
System.out.println("La lista esta vacia");
            else if(
index == numNodos-1){
                
//si es el ultimo nodo el que queremos, nos movemos hasta el final
                
while(tmp.ptr!=null)
                    
tmp tmp.ptr;
                
//hacemos la copia
                
info tmp;
            }else{
                
//nos recorremos hasta donde el indice nos permita
                
int i=0;
                do{
                    
info tmp;
                    
tmp tmp.ptr;
                    
i++;
                }while(
i<=index);
            }
        }else{
            
System.out.println("Fuera del rango");
        }
        
//regresamos el nodo
        
return info;
    }
    
    
//elimina un nodo deacuerdo al indice dado
    
public void remove(int index){
        
//revisamos que el indice este dentro del rango
        
if(index numNodos && index >= 0){
            
//puntero para movernos en la lista
            
Nodo tmp root;
            
//ravisamos que no este vacia
            
if(tmp==null)
                
System.out.println("La lista esta vacia");
            else if(
index == numNodos-&& index>0){
                
//si es el ultimo nodo de la lista
                
while(tmp.ptr.ptr!=null)
                    
//nos movemos hasta uno antes del final
                    
tmp tmp.ptr;
                
//eliminamos el enlace
                
tmp.ptr null;
                
//decrementamos el total de nodos
                
numNodos--;
                
System.out.println("Borrado con exito!!");
            }else{
                
//si es el primer nodo
                
if(index == 0){
                    
//movemos el root al siguiente nodo, entonces el primero lo perdemos
                    
root tmp.ptr;
                }else{
                    
//nos movemos hasta un nodo antes del indice
                    
int i=0;
                    while(
i<index-1){
                        
tmp tmp.ptr;
                        
i++;
                    }
                    
//enlazamos el nodo anterior al indice, haciendo una especie de salto
                    //al nodo que querremos eliminar, de tal manera que el que queremos eliminar
                    //quede afuera de la lista
                    
tmp.ptr tmp.ptr.ptr;
                }
                
//decrementamos el total de nodos
                
numNodos--;
                
System.out.println("Borrado con exito");
            }
        }else{
            
System.out.println("Fuera del rango");
        }
    }
    
    
//regresa el numero de nodos en la lista
    
public int size(){
        return 
numNodos;
    }
    
    
//imprime la lista de nodos
    
public void print(){
        
//puntero que se movera sobre la lista
        
Nodo tmp root;
        
//sercirandonos que no este vacia
        
if(tmp==null){
            
System.out.println("La lista esta vacia :(");
        }else{
            
//nos movemos hasta el final imprimiendo nodo por nodo
            
int i=0;
            do{
                
System.out.println("-------------");
                
System.out.println("Indice-> "+i);
                
System.out.println(tmp.nombre);
                
System.out.println(tmp.apellido);
                
System.out.println(tmp.edad);
                
System.out.println("------\\/------");
                
tmp tmp.ptr;
                
i++;
            }while(
tmp.ptr!=null);
            
//imprimimos el ultimo nodo que visitamos
            
System.out.println("-------------");
            
System.out.println("Indice-> "+i);
            
System.out.println(tmp.nombre);
            
System.out.println(tmp.apellido);
            
System.out.println(tmp.edad);
            
System.out.println("------\\/------");
        }
    }



ahora, vamos a hacer una aplicacion que utilice nuestra lista, Implementa.java

Código PHP:
/*
* Author: Crysfel Villa
* Created: Sunday, October 17, 2005 11:58:15 PM
* Modified: Sunday, October 17, 2005 11:58:15 PM
*/ 

public class Implementa {
    public static 
void main(String arg[]){
        
Lista lista = new Lista();
        
//llenamos la lista
        
for(int i=0;i<10;i++){
            
Nodo nodo = new Nodo();
            
nodo.nombre "nombre"+i;
            
nodo.apellido "apellidos";
            
nodo.edad 10+i;
            
//vamos agregandole nodos
            
lista.add(nodo);
        }
        
        
System.out.println("elementos-> "+lista.size());
        
lista.print();
        
lista.remove(9);
        
lista.remove(0);
        
lista.remove(10);
        
lista.remove(5);
        
System.out.println("elementos-> "+lista.size());
        
lista.print();
        
System.out.println("----------");
        
Nodo sacado lista.get(2);
        if(
sacado!=nullSystem.out.println(sacado.edad);
        
sacado lista.get(9);
        if(
sacado!=nullSystem.out.println(sacado.edad);
        
sacado lista.get(0);
        if(
sacado!=nullSystem.out.println(sacado.edad);
        
sacado lista.get(100);
        if(
sacado!=nullSystem.out.println(sacado.edad);
        
System.out.println("elementos-> "+lista.size());
    }

Bueno, espero que halla quedado claro el concepto y que le pueda servir a alguien!!

have funnnnnnnnn

Última edición por stock; 24/03/2006 a las 13:12
  #26 (permalink)  
Antiguo 30/12/2005, 08:36
Avatar de dacmonsalve  
Fecha de Ingreso: noviembre-2005
Ubicación: Colombia Tierra querida, himno de fe y armonia
Mensajes: 318
Antigüedad: 12 años, 1 mes
Puntos: 6
Como sumar y restar fechas

Tema Fechas en JAVA
PreguntaComo sumarle o restarle dias a una fecha
RespuestaEs facil de realizar con el GregorianCalendar de JAVA y su evento .add('fecha','numero de dias a sumarle a la fecha')
Ejemplo
Código PHP:
  public java.sql.Date fechaMas(java.sql.Date fchint dias){
     
Calendar cal = new GregorianCalendar();
     
cal.setTimeInMillis(fch.getTime());
     
cal.add(Calendar.DATEdias);
     return new 
Date(cal.getTimeInMillis());
   }

   public 
java.sql.Date fechaMenos(java.sql.Date fchint dias){
     
Calendar cal = new GregorianCalendar();
     
cal.setTimeInMillis(fch.getTime());
     
cal.add(Calendar.DATE, - dias);
     return new 
Date(cal.getTimeInMillis());
   } 
Al momento de Invocar el evento 'Mas' o 'Menos', se le envian los paramentros 'FECHA' y 'numero de dias que se le sumaran o restaran a esta fecha'.

Espero les haya servido.........
  #27 (permalink)  
Antiguo 09/01/2006, 22:27
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: NET
Pregunta: como mandar correos con JAVA?
Respuesta: Para el envio de correos electronicos, primeramente necesitamos un servidor de correo ya sea SMTP, POP, IMAP, MIME, etc... para esta FAQ vamos a usar un SMTP, QMail que corre en un Gentoo, si quieres usar este mismo, pues aqui un tutorial de instalacion http://gentoo-wiki.com/HOWTO_Setup_Q...r_Mail_Servers sobre gentoo por supuesto!!.

OK, una vez instalado tu SMTP puedes usar las librerias para el envio de correos desarrolladas por la SUN, el JavaMail y la de JavaBeans, los cuales los puedes conseguir aqui:

http://java.sun.com/products/javamail/
http://java.sun.com/products/javabeans/glasgow/jaf.html

ok, luego de esto, metemos a nuestro classpath estas dos librerias, luego puedes usar el siguiente codigo para darte un ejemplo:

Código PHP:
/*
 * Created on Jan 9, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package util;

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sun.mail.smtp.SMTPTransport;

/**
 * @author crysfel
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class SendMail {

    private 
String myName;
    private 
String myMail;
    private 
String to;
    private 
String subject
    private 
String cc;
    private 
String bcc;
    private 
String url;
    private 
String mailhost;
    private 
String user
    private 
String password;
    private 
boolean auth;
    private 
String text;
    
    public 
void send()throws Exception{
        
String mailer "smtpsend";
        
boolean verbose false;
        
boolean ssl false;
        
        
//esto es para establecer el remitente
        
String from myName+"<"+myMail+">";
        
        try {
            
//tomamos las propiedades del sistema
            
Properties props System.getProperties();
            if (
mailhost != null)
                
props.put("mail.smtp.host"mailhost);
            
            if (
auth)
                
props.put("mail.smtp.auth""true");
            
            
Session session Session.getInstance(propsnull);
            
//creamos el objeto mensaje para enviar
            
Message msg = new MimeMessage(session);
            
            
//asignamos el remitente
            
if (from != null)
                
msg.setFrom(new InternetAddress(from));
            else
                
msg.setFrom();
            
            
//agregamos al destinatario
            
msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(tofalse));
            
            
//si hay algo en el campo de CC lo asignamos a los destinatarios
            
if (cc != null)
                
msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(ccfalse));
            
//otra copia
            
if (bcc != null)
                
msg.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(bccfalse));
    
            
//asignamos el asunto del mensaje
            
msg.setSubject(subject);
            
//seleccionamos el envio del texto con formato html
            //si quieres que sea texto plano, puedes usar
            //la funcion 
            //msg.setText(text);
            //en lugar de esta:
            
msg.setContent(text,"text/html");
            
msg.setHeader("X-Mailer"mailer);
            
//la fecha de envio del mensaje
            
msg.setSentDate(new Date());

            
//creamos el objeto encargado de enviar el mensaje
            
SMTPTransport t = (SMTPTransport)session.getTransport(ssl "smtps" "smtp");
            try {
                
//si necesita autentificacion, nos conectamos con el usuario y pass  
                //si no tambien nos conectamos, pero sin autentificarnos
                
if (auth)
                    
t.connect(mailhostuserpassword);
                else
                    
t.connect();
                
//enviamos el mensaje a todos los destinatarios
                
t.sendMessage(msgmsg.getAllRecipients());
            } 
finally {
                if (
verbose)
                    
System.out.println("Respuesta del servidor smtp: " t.getLastServerResponse());
                
//cerramos la conexion con el SMTP
                
t.close();
            }
            
            
System.out.println("\n enviado con Exito!!.");

        } catch (
Exception e) {
            throw new 
Exception("<strong>Error al enviar el mail: </strong>"+e);
        }

    }
    
/**
     * @return Returns the auth.
     */
    
public boolean isAuth() {
        return 
auth;
    }
    
/**
     * @param auth The auth to set.
     */
    
public void setAuth(boolean auth) {
        
this.auth auth;
    }
    
/**
     * @return Returns the bcc.
     */
    
public String getBcc() {
        return 
bcc;
    }
    
/**
     * @param bcc The bcc to set.
     */
    
public void setBcc(String bcc) {
        
this.bcc bcc;
    }
    
/**
     * @return Returns the cc.
     */
    
public String getCc() {
        return 
cc;
    }
    
/**
     * @param cc The cc to set.
     */
    
public void setCc(String cc) {
        
this.cc cc;
    }
    
/**
     * @return Returns the mailhost.
     */
    
public String getMailhost() {
        return 
mailhost;
    }
    
/**
     * @param mailhost The mailhost to set.
     */
    
public void setMailhost(String mailhost) {
        
this.mailhost mailhost;
    }
    
/**
     * @return Returns the myMail.
     */
    
public String getMyMail() {
        return 
myMail;
    }
    
/**
     * @param myMail The myMail to set.
     */
    
public void setMyMail(String myMail) {
        
this.myMail myMail;
    }
    
/**
     * @return Returns the myName.
     */
    
public String getMyName() {
        return 
myName;
    }
    
/**
     * @param myName The myName to set.
     */
    
public void setMyName(String myName) {
        
this.myName myName;
    }
    
/**
     * @return Returns the password.
     */
    
public String getPassword() {
        return 
password;
    }
    
/**
     * @param password The password to set.
     */
    
public void setPassword(String password) {
        
this.password password;
    }
    
/**
     * @return Returns the subject.
     */
    
public String getSubject() {
        return 
subject;
    }
    
/**
     * @param subject The subject to set.
     */
    
public void setSubject(String subject) {
        
this.subject subject;
    }
    
/**
     * @return Returns the text.
     */
    
public String getText() {
        return 
text;
    }
    
/**
     * @param text The text to set.
     */
    
public void setText(String text) {
        
this.text text;
    }
    
/**
     * @return Returns the to.
     */
    
public String getTo() {
        return 
to;
    }
    
/**
     * @param to The to to set.
     */
    
public void setTo(String to) {
        
this.to to;
    }
    
/**
     * @return Returns the user.
     */
    
public String getUser() {
        return 
user;
    }
    
/**
     * @param user The user to set.
     */
    
public void setUser(String user) {
        
this.user user;
    }

OK, ahora la implementacion de esa clase, seria algo como esto:
Código PHP:
/*
 * Created on Jan 9, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author crysfel
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class ImplementaMail {
    public static 
void main(String arg[]){
        
//creamos el objeto para el envio del correo
        
SendMail mail = new SendMail();
        
        
//datos del servidor SMTP
        
mail.setMailhost("localhost");
        
mail.setAuth(true);
        
mail.setUser("root");
        
mail.setPassword("");
        
        
//datos del remitente
        
mail.setMyName("Crysfel Villa");
        
mail.setMyMail("[email protected]");
        
        
//datos del destinatario
        
mail.setTo("[email protected]");
        
mail.setCc("[email protected]");
        
mail.setSubject("Probando el HTML!!");
        
mail.setText("Esta es una prueba del objeto <b>SendMail.java</b> <br><br><center>usando HTML</b><br><br><img src=\"http://pulso.um.edu.mx/~crysfel/pictures/chiles/chiles3.jpg\">");
        
        try{
            
//enviamos el mensaje!!
            
mail.send();
        }catch(
Exception e){
            
System.out.println(e);
        }
    }

Bueno, esto es todo!! espero le pueda servir a alguien!!

have funnnnnnnnnnnn

Última edición por stock; 24/02/2007 a las 20:41
  #28 (permalink)  
Antiguo 05/02/2006, 19:29
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Java 2D
Pregunta: Como puedo generar Thumbnails en java??
Respuesta: Bueno, primero te explico que un Thumbnail es una pequeña imagen generada de una de mayor tamaño, son para visualizar muchas imagenes en tamaño pequeño.

Con JAVA esto es posible porsupuesto , acontinuacion voy a poner una clase que es la encargada de hacer el trabajo, despues pondre la implementacion de dicha clase.

he puesto comentarios a las partes de codigo mas importante
Código PHP:
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/*
 * Created on Jan 23, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Crysfel Villa
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Imagen {
    private 
String imgOriginal;
    private 
String imgResult;
    private 
int calidad;
    private 
int width;
    private 
int height;
    
    
    public 
void resize()throws Exception{
        
//Cargamos la imagen y la preparamos para manipularla
        
Image image Toolkit.getDefaultToolkit().getImage(imgOriginal);
        
MediaTracker mediaTracker = new MediaTracker(new Container());
        
mediaTracker.addImage(image0);
        
mediaTracker.waitForID(0);
        
//Sacamos la proporcion de las nuevas medidas
        
double tnsPro = (double)width/(double)height;
        
//Calculamos la proporcion de la imagen original
        
int imgWidth image.getWidth(null);
        
int imgHeight image.getHeight(null);
        
double imgPro = (double)imgWidth / (double)imgHeight;
        
//comprobamos cual de las dos medidas introducidas esta desproporcionada
        //para asi corregirla
        
if (tnsPro imgPro) {
            
//asignamos una nueva height a la imagen generada
            //para mantener la proporcion con respecto a la original
            
height = (int)(width imgPro);
        } else {
            
//lo mismo pero con el width
            
width = (int)(height imgPro);
        }
        
        
//Creamos la imagen a generar, con los atributos requeridos, ancho, algo, y
        //el ultimo parametro especifica que vamos a guardar la imagen en formato "8-bit RGB"
        //que es un formato compatible con sistemas basados en Solaris o Windows
        //hay mas formatos, ver http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html
        
BufferedImage tnsImg = new BufferedImage(width,heightBufferedImage.TYPE_INT_RGB);
        
Graphics2D graphics2D tnsImg.createGraphics();
        
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        
graphics2D.drawImage(image00widthheightnull);
        
        
//Preparamos para escribir la imagen generada en el disco
        
BufferedOutputStream out = new BufferedOutputStream(new    FileOutputStream(imgResult));
        
//creamos el "parseador" para guardar la imagen en formato JPG
        
JPEGImageEncoder encoder JPEGCodec.createJPEGEncoder(out);
        
JPEGEncodeParam param encoder.getDefaultJPEGEncodeParam(tnsImg);

        
//Asignamos la calidad con la que se va a guardar la imagen de 0-100
        
calidad Math.max(0Math.min(calidad100));
        
param.setQuality((float)calidad 100.0ffalse);
        
encoder.setJPEGEncodeParam(param);
        
encoder.encode(tnsImg);
        
out.close(); 
        
//there you go =D
    
}
    
    
    
/**
     * @return Returns the calidad.
     */
    
public int getCalidad() {
        return 
calidad;
    }
    
/**
     * @param calidad The calidad to set.
     */
    
public void setCalidad(int calidad) {
        
this.calidad calidad;
    }
    
/**
     * @return Returns the height.
     */
    
public int getHeight() {
        return 
height;
    }
    
/**
     * @param height The height to set.
     */
    
public void setHeight(int height) {
        
this.height height;
    }
    
/**
     * @return Returns the imgOriginal.
     */
    
public String getImgOriginal() {
        return 
imgOriginal;
    }
    
/**
     * @param imgOriginal The imgOriginal to set.
     */
    
public void setImgOriginal(String imgOriginal) {
        
this.imgOriginal imgOriginal;
    }
    
/**
     * @return Returns the imgResult.
     */
    
public String getImgResult() {
        return 
imgResult;
    }
    
/**
     * @param imgResult The imgResult to set.
     */
    
public void setImgResult(String imgResult) {
        
this.imgResult imgResult;
    }
    
/**
     * @return Returns the width.
     */
    
public int getWidth() {
        return 
width;
    }
    
/**
     * @param width The width to set.
     */
    
public void setWidth(int width) {
        
this.width width;
    }

Ok, pues como veraz, esta clase tiene las propiedades con las que quieres que se genere el TNS, y el metodo para generarlos se llama resize().

ahora pongo la forma de uso.

Código PHP:
/*
 * Created on Jan 23, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Crysfel Villa
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

public class Thumbnail {
    public static 
void main(String[] argsthrows Exception {
        
Imagen img = new Imagen();
        
//seleccionamos la imagen a modificar
        
img.setImgOriginal("09.jpg");
        
//el nombre con el cual se generara el TNS
        
img.setImgResult("tns.jpg");
        
//la calidad
        
img.setCalidad(100);
        
//las nuevas medidas, deben ser proporcionales
        //aunque si alguna no lo es, la clase lo corrige
        
img.setWidth(90);
        
img.setHeight(60);
        
        
//there u go ;)
        
img.resize();
    }

Ok, cabe aclarar que la clase tambien se puede usar en algun servlet o en un JSP, en fin, la puedes usar donde quieras

have funnnnnnnnnn
  #29 (permalink)  
Antiguo 08/02/2006, 22:29
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Java Principiante
Pregunta: Cual es el formato o estructura de una clase?
Respuesta: mmmmmm mejor vemos el codigo

Código PHP:
/*
 * primeramente se pone el paquete al que pertenece
 * esta clase, si no necesitas empaquetar esta clase, puedes
 * omitir esta linea, mas explicacion al respecto en la FAQ #21 ;)
 */

package mx.um.edu.pulso.paquetin;

/* 
 * En esta parte se importan otras clases que usaremos para 
 * la nuestra, ya sean clases que vienen con el J2SDK o bien
 * clases que nosotros mismos tengamos.
 */
import java.util.Date;
import java.util.SimpleDateFormat;

import java.io.*;

import mx.edu.um.pulso.herramientas.MiClasesita;

/**
 * Por aqui puedes poner el autor, la fecha o comentarios extras (si lo deseas)
 * @author Crysfel Villa
 *  Febrero 19, 2006
 */

/*
 * Ahora definimos el nombre que le daremos a la clase,
 * es importante mencionar que debe de ser el mismo nombre del
 * archivo, para este caso seria: MiClase.java
 */
public class MiClase{
   
/*
    * Aqui podemos declarar las propiedades de la clase, 
    * en caso de necesitarlas, claro que no es obligatorio, estas
    * propiedades pueden ser accedidas por los metodos de esta
    * misma clase, son como "variables globales"
    */
    
public String string1;
    public 
int entero1;
    public 
int entero2;

    
/*
     * Ahora podemos declarar los constructores de esta clase
     * si no lo hacemos no afecta, ademas puedes poner cuantos
     * constructores necesites, la unica restriccion es que la firma
     * debe ser diferente, en otro FAQ hablare mas de la firma del Metodo.
     */
    
public MiClase(){
       
//este es el constructor 1
       
this.entero1 this.entero2 0;
       
this.string1 "";
    }

    public 
MiClase(int entero1,int entero2){
       
//este es el constructor 2
       
this.entero1 entero1;
       
this.entero2 entero2;
       
this.string1 "";
    }

    public 
MiClase(int entero1,int entero2,String string1){
       
//este es el constructor 3
       
this.entero1 entero1;
       
this.entero2 entero2;
       
this.string1 string1;
    }

    
/*
     * Este es un buen lugar para declarar nuestros Metodos
     */

    
public void setString1(String string1){
       
this.string1 string1;
    }    

    public 
int suma(){
      return 
entero1 entero2;
    }

    public 
String getFecha(){
       
Date fecha = new Date(); 
       
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
       return 
sdf.format(fecha);
    }

Bueno, aclaro que esta no es la unica manera de hacerlo, ni que si lo haces de otra forma estas mal, sino que este es el formato a mi forma de ver mas organizado y claro, es el que en lo personal yo uso

have funnnnnnn!!

Última edición por stock; 19/02/2006 a las 20:23
  #30 (permalink)  
Antiguo 11/02/2006, 22:47
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Tema: Java Principiante
Pregunta: Como instalar JAVA?
Respuesta: Esto es lo primero que debemos hacer cuando queremos comenzar en el mundo de JAVA.

Primero necesitamos descargar el J2SE (Java 2 Standard Edition)
http://java.sun.com/j2se/1.4.2/download.html, aceptamos la licencia y seleccionamos la plataforma en la que desarrollaremos, Linux, Solaris, Windows, depende de tu sistema operativo.

Supongamos que la bajaremos para Windows, seleccionamos entonces windows y esperamos a que se termine de descargar.

Mientras esperamos, te voy a contar un poco de la historia y de como trabaja JAVA.

Java surge en 1990 por su fundador James Gosling, en un principio Java fue desarrollado para dispositivos moviles, microondas, y otros dispositivos semejantes.

En 1995 el internet comenzaba a crecer a grandes escalas, asi que Bill Joy decidio desarrollar Java para que pudiera funcionar en la red.

Ala fecha Java es una tecnologia muy poderosa, aqui algunas caracteristicas de este lenguaje:

- Multiplataforma
- Orientado a Objetos
- Codigo Reutilizable
- Etc, etc...

Bueno, algo importante que debes de saber, es que para lograr que Java sea un lenguaje multiplataforma, es gracias a la JVM (Java Virtual Machine), esta es la encargada de interpretar los byte-codes que se generan al compilar nuestros codigos fuentes.

Excelente, ya termino la descarga, Ok procederemos a instalarla, aceptas la licencia, lo demas es siguiente, siguiente, esperas a que se termine de instalar y luego te pide reiniciar tu Ordenador.

Ahora vamos a dar de alta la variable de entorno JAVA_HOME y a agregar en el PATH del sistema operativo el directorio donde esta el compilador, esto para que podamos compilar desde la consola.

OK, si estas en windows xp, ve a Start ->My Pc-> Properties -> Advanced -> Enviroment Variables -> New, ahora escribe JAVA_HOME como name y en value pones la URL donde esta instalado el J2SDK, presionas OK.

ahora localizamos la variable PATH y le damos Edit y al final del value, agregamos ;%JAVA_HOME%\bin al final de todos los que existen.

Pues bien, ahora estamos listos para comenzar a aprender este lenguaje.

saludos!!

Última edición por stock; 28/05/2006 a las 22:28

Etiquetas: faq
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 33 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 14:06.