Guía básica de Java

Anuncio
GUIA BÁSICA DE JAVA
Por Miguel Useche
http://www.skatox.com/
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
INTRODUCCIÓN
Guía realizada por Miguel Useche, al principio consistía en una guía
personal para ayudarme en la universidad pero luego al ir creciendo
decidí compartirla con el resto de personas.
Esta guía sirve como referencia para el programador que conoce los
básicos conceptos de Java, por tal motivo, no intento explicar en mucho
detalle todo, sino simplemente poner semi-ejemplos de como hacer las
cosas y tener una idea de como hacerlo.
Espero que les guste, la sigan distribuyendo siempre y cuando no la
modifiquen y respeten los derechos de autor.
Miguel Useche
www.skatox.com
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
ARCHIVOS
ARCHIVOS DE TEXTO (Secuenciales)
Estos archivos sirven para guardar cadenas de texto principalmente, se leen secuencial, es decir, línea por línea y no sirven para guardar objetos de manera binaria. Aquí observamos como crear un archivo File que es para manejar archivos y carpetas.
File archivo = new File(“ruta)
= new File(“/carpeta/”,”archivo.extension”)
= new File(“ruta_de_carpeta”) //de esta forma el objeto es una carpeta
Métodos Importantes:
archivo.exists(); //chequea si existe o nó (devuelve booleano)
archivo.canWrite() //chequea si tiene permiso de escritura (booleano) archivo.canRead() //chequea si permiso de lectura (devuelve booleano)
archivo.isFile() //chequea si es un archivo(devuelve booleano) archivo.isDirectory() //chequea si es una carpeta (devuelve booleano)
archivo.lists() //lista los archivos en el directorio del objeto archivo
archivo.renameTo(archivo2) //renombra el archivo al nombre de archivo2 //borra el archivo (devuelve booleano dependiendo si pudo hacerlo)
archivo.delete() Leer línea por línea un archivo:
//Objeto que lee el archivo en la ruta indicada (si no existe lo crea)
String linea;
BufferedReader lector = new BufferedReader(new FileReader(“ruta_archivo.extension”));
//Guardo en un string, si llega al final del archivo devuelve NULL
linea = lector.readLine();
//Es recomendado cerra el archivo después de leerlo
lector.close();
Escribir línea por línea en un archivo:
//Objeto que va a escribir en la ruta indicada (si no existe lo crea)
FileWriter escritor = new FileWriter(“ruta_archivo.extension”);
//Aqui le decimos al objeto que escriba en el archivo lo que recibe por parametro
escritor.write(“COSA A GUARDAR”);
///DESPUES DE ESCRIBIR TODO RECORDAR CERRAR EL ESCRITOR PA Q SE GUARDE
escritor.close();
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
Método Abrir:
//Este metodo me permite crear un FileDialog para buscar la ruta de un archivo y devolverla, requiere un String para el titulo de la ventana del FileDialog
File ARCHIVOAUSAR = abrir(“TITULO DE LA VENTANA”);
static File abrir(String a){
File archivo = new File(""); //CREA EL ARCHIVO
try{
//Crea un frame para pegar el FileDialog
Frame cuadro = new Frame();
cuadro.show(); FileDialog abrirarchivo = new FileDialog(cuadro,a, FileDialog.LOAD);
abrirarchivo.show(); //Muestra el FileDialog
archivo = new File(abrirarchivo.getDirectory(),abrirarchivo.getFile());
cuadro.hide();
abrirarchivo.hide(); //oculta todo una vez seleccionado el archivo
}
catch(Exception e){
System.out.println("ERROR AL CARGAR ARCHIVO");
//Aqui se inserta el error en caso de no cargar el archivo
}
return archivo;
}
ARCHIVOS ALEATORIOS (Secuenciales)
Estos archivos guardan bytes de información, no son secuenciales por lo que se puede leer en cualquier parte del archivo de manera instantánea, se suelen usar para guardar objetos de Java. Cabe destacar que para leer de ellos, se debe saber la estructura de como se guardaron los datos.
//Asi se crea en java este tipo de archivo, el segundo parametro es sólo “r”
// si desea para pura lectura o “rw” para lectura y escritura.
RandomAccessFile archivo = new RandomAccessFile(“ruta_archivo”,”rw”);
Métodos Importantes:
archivo.length() //devuelve el tamaño del archivo (long)
archivo.seek(pos) //ubica el puntero del archivo en pos el cual es long
archivo.close() //cierra el archivo
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
Leer y Escritura de archivos de acceso aleatorio:
Lo bueno de estos archivos es que no es necesario crear un objeto para lectura y otro para escritura, ya que el mismo objeto RandomAccessFile tiene los métodos para la lectura y escritura. Por lo que para la lectura sería simplemente:
/****LECTURA******/
String buffer= archivo.readUTF();//Leer una cadena de Texto
byte buffer = archivo.readByte(); //Leer un byte int buffer = archivo.readInt() //Leer Entero
/****ESCRITURA******/
//Para la escritura se debe tener cuidado al ubicar el cursor del archivo
//ya que hay riesgo de sobreescribir datos, si desean escribir al final del
// archivo abierto (con permisos “rw”) deben hacer:
archivo.seek(archivo.length()) //ubica el cursor al final del archivo
archivo.write(buffer) //escribe buffer en bytes (puede ser un vector)
archivo.writeInt(numero) //escribe el int numero en el archivo
archivo.writeUTF(texto) //escribe una cadena de texto (string) en el archivo
Existen muchas formas mas de leer y escribir en estos archivos de acceso aleatorio, por lo que les recomiendo consultar el API de java para obtener mayor información.
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
OPERACIONES MATEMÁTICAS
CLASE MATH
Esta es la clase en java que permite las operaciones básicas de la matemáticas, al igual que trae el valor constantes de algunos números importantes para las matemáticas, como PI, Exponencial, entre otros. Para acceder a ella se importa con:
import java.lang.Math;
Constantes que trae la clase:
Math.PI; // Pi π
Math.E; //Exponencial
Operaciones matemáticas:
Math.abs(numero); //valor absoluto de un número
Math.round(numero) //aproximación de un entero
Math.floor(numero) //aproximación de un decimales
Math.min(num1,num2)//halla el menor de 2 números (devuelve el menor)
Math.max(num1,num2) //hall el mayor de 2 números (devuelve el mayor)
Math.pow(base,exponente) // Halla la potencia de un numero Math.random() //devuelve número pseudo­aleatorio entre 0.0 y 1.0
Math.sqrt(numero) //devuelve la raíz cuadrada de un número
Math.log(numero) //devuelve el logaritmo de un número Math.sin(angulo) //da el seno de un ángulo
Math.cos(angulo) //da el coseno de un ángulo
NUMEROS ALEATORIOS CLASE RANDOM
Para ello se utiliza la clase Random (Azar en inglés), y se obtiene mediante:
import java.util.Random;
Se crea un objeto de la clase Random para obtener las funciones (no es necesario pero si recomendable) de la manera siguiente:
Random azar = new Random();
Obtener numeros aleatorios:
int numero=azar.nextInt(limite) // Da un aleatorio desde 0 hasta limite­1
float num=azar.nextFloat(); // Da un flotante entre 0.0 y 1.0
double num=azar.nextDouble(); // Da un double entre 0.0 y 1.0
boolean verdad=azar.nextBoolean(); // Método que devuelve true o false
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
OPERACIONES CON MATRICES (ARREGLOS 2D)
Declaración:
Tipo_de_Objeto [][] nombre_matriz = new Tipo_de_Objeto[tamaño][tamaño] int [][] mat = new int [3][3]; // ejemplo de creacion de una matriz 3x3
Nota: Cuando se crean matrices de objetos, se debe definir la matriz, y luego recorrela toda para instanciar (darle memoria con new) cada objeto de la matriz.
Recorrido:
for(j=0; j<ancho; j++){
for(i=0; i<alto; i++){ mat[i][j];
}
}
//[vertical][horizontals]
//[filas][columnas]
Lectura de matriz por filas:
//En este ejemplo se lee del teclado los valores a llenar en una matriz:
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
String buffer;
for(int i=0;i<4;i++)
for(int j=0;j<5;j++)
{
System.out.println("Ingrese un numero");
try{
buffer=teclado.readLine();
Matriz[i][j]=Integer.parseInt(buffer);
}catch(IOException e){}
}
for(int i=0; i<4;i++){
for(int j=0;j<5;j++)
{
System.out.print(Matriz[i][j]+" ");
}
System.out.println();
}
Lectura de matriz por columnas Imprimir matriz en la consola
for(int j=0;j<5;j++)
for(int j=0; j<5;j++){
for(int i=0;i<4;i++)
matriz[i][j]; for(int i=0;i<4;i++)
System.out.print(Matriz[i][j]+" ");
System.out.println();
}
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
TRANSFORMACIONES ENTRE OBJETOS
Char caracter= Character.forDigit(numero,base); // numero a carácter
int num = Character.digit(caracter,base); // caracter a numero
Character letra =new Character('letra');
String texto = objeto.toString(); // caracter a arreglo de texto
char texto[]= string.toCharArray()//cadena de texto a arreglo de caracteres
String linea =String.valueOf(numero); //numero a cadena
int numero = Integer.parseInt(Texto); //texto a numero
float num = Float.parseFloat(Texto); //texto a flotante
float num = Double.parseDouble(Texto); //texto a doble precisión
byte arreglo[]= (byte) Objeto //pasar algo a bytes
MANIPULACIÓN DE BITS
//Con signo
Objeto >> n //desplaza a la derecha “n” posiciónes los bits del objeto Objeto << n //desplaza a la izquierda “n” posiciónes los bits del objeto //Sin signo
Objeto >>> n //desplaza a la derecha “n” posiciónes los bits del objeto a & b // operación and entre a y b
a | b // operación or entre a y b
a ^ b // operación or exlusiva entre a y b
Notas:
●
●
Al desplazar a la derecha sin signo, los bits vacios se rellena con 0.
Al desplazar a la izquierda, si se desplaza un 1 al bit mas significativo, el valor se convertirá en negativo.
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
METODOS DE ORDENACIÓN
Aquí simplemente van algunos algoritmos hecho para ordenar un arreglo unidimensional:
QUICKSORT
public class QuickSort
{
public static void intercambiar(int arreglo[], int pos, int y)
{
int temp = arreglo[pos];
arreglo[pos] = arreglo[y];
arreglo[pos] = temp;
}
public static int particionar(int arreglo[], int inicio, int limite)
{
int pivote = arreglo[inicio];
while ( inicio < limite)
{
while (arreglo[inicio] < pivote) inicio++;
while (arreglo[limite] > pivote) limite­­;
intercambiar(arreglo, inicio, limite);
}
return inicio;
}
public static void Quicksort(int arreglo[], int inicio, int limite)
{
if ( inicio >= limite) return;
int pivote = partition(arreglo, inicio, limite);
Quicksort(arreglo, inicio, pivote);
Quicksort(arreglo,pivote+1, limite);
}
//Para usar esta clase, se llama a Quicksort asi:
QuickSort.Quicksort(objeto,0,objeto.length());
METODO DE LA BURBÚJA
public static void burbuja(int[] v)
{
for(int i=1; i<v.length; i++) {
for(int j=0; j<v.length­i; j++)
{
if(v[j]>v[j+1]) // Signo: < de Menor a Mayor ó > Mayor a menor.
{
int aux=v[j];
v[j]=v[j+1];
v[j+1]=aux;
}
}//fin for j
}//fin for i
}
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
SELECCIÓN DIRECTA
for( int i=0; i<v.length ­1; i++){
int menor = v[i];
int pos = I;
for(int j=i+1; j<v.length; j++){
if(v[i] < menos)
{
intaux = v[i];
menor = v[j];
pos = j;
}
}
v[pos] = v[i];
v[i] = menor;
}}
VALIDACIONES
Validar ciertos caracteres:
La validación se hace para que al ingresar datos, no entren datos erróneos que puedan alterar ó bloquear el funcionamiento del programa. Si queremos validar cierta cantidad de caracteres (sólo números, letras, etc), con esta función se puede hacer todo, sólo se debe cambiar la variable “lista_caracteres” para que incluya sólo los caracteres que puede aceptar de una cadena:
public static boolean aceptar(String cadena){
//en este caso son sólo numeros descomentar la otra linea para letras
String lista_caracteres = "0123456789 "; // String lista_caracteres = "ABCDEFGHIJKLMNÑOPQURSTUVWXYZ "; String caracter, aux1;
int i, j;
boolean aceptado = true;
for(i=0; i< cadena.length(); i++) {
caracter = cadena.substring(i, i+1);
for(j=0; j <= (lista_caracteres.length()­1); j++){
aux1 = lista_caracteres.substring(j, j+1);
if(aux1.compareTo(caracter) == 0) break;
if(j== 10){
aceptado = false;
break;
}
} }//end for
return aceptado; //Si es true que lo acepta, false es no válido
}
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
CADENAS DE TEXTO (String)
Funciones importantes:
Cada cadena de texto (String) posee una serie de métodos que nos permite realizar tareas que facilitarán nuestra programación, a continuación le muestro alguna de las mas importantes:
cadena.length() //devuelve el largo de la cadena (cantidad de caracteres en ella
cadena.toLowerCase() //devuelve cadena con todas las letras en minúscula
cadena.toUpperCase() //devuelve cadena con todas las letras en mayúscula
cadena.trim() //devuelve la cadena sin espacios
cadena.charAt(posición) //devuelve la letra que esta en la posición indicada
cadena.indexOf(letra) //devuelve la primera posición de la letra en el texto
cadena.lastIndexOf(letra) //devuelve la última posición de la letra en el texto
//sustituye el caracter por caracter_nuevo en la cadena
cadena.replace(caracter,caracter_nuevo) //sustituye la porcion de texto que coincida con subcadena por nuevo
cadena.replaceAll(subcadena,nuevo) //separa la cadena en porciones de texto (palabras, ejemplo) delimitadas por // los caracteres indicados en su parametro, por ejemplo:
String texto = “esto es prueba”;
String vector[];
vector = texto.split(“ “);
//guardará en cada posición del vector (en este caso 3) cada palabra, ya que cada palabra esta separada por un espacio.
//otro ejemplo
String texto = “esto­es/prueba”;
String vector[];
vector = texto.split(“/­“);
//guardaría cada palabra en cada posición de vector porque los delimitadores usados en cadena son los mismos que los pasados por parámetros.
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
ARREGLO DINÁMICO
Creación:
●
●
●
Se hace con la clase Vector, para ello se debe importar java.util:
import java.util.Vector
Se instancia el objeto:
Vector variable = new Vector();
Se instancia el objeto:
Vector variable = new Vector();
Métodos importantes:
variable.addElement(cosaaaguardar); //agrega un objeto al vector
//NOTA: a veces hay q transformarlo en la variable deseada.
variable.get(indice); //obtiene el objeto en el indice pedido
variable.remove(indice) //elimina el objeto que está en el indice
variable.removeElement(Objeto)//elimina el primer objeto que sea igual al parametro variable.size() //devuelve el tamaño del vector
variable.toArray() //devuelve un vector con los elementos que contiene
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
INTERFAZ GRAFICA
AGREGAR ALGO AL FRAME
frame.getContentPane().add(loquesea);
Layout new FlowLayout()//Sin layout
CANVAS
import java.awt.*;
import java.awt.event.*;
public class MyCanvas extends Canvas {
public static void main(String[] args) throws Exception {
Frame f = new Frame();
f.setBounds(0, 0, 500, 300);
MyCanvas can = new MyCanvas(){
public void paint(Graphics g){
int ancho=getSize().width;
int alto=getSize().height;
String titulo="hola";
g.setColor(Color.BLACK);
g.setFont(getFont());
g.fillOval(200, 200, 30,30);
g.fillArc(150, 150, 60, 60, 90, 90);
g.fillRect(10, 20, 100, 2);
}
};
f.add(can);
CANVAS (JPANEL)
import java.awt.Graphics;
public class JPanelSencillo {
public static void main(String args[]) {
//
// Se crea un nuevo panel por derivación de JPanel
//
JPanel jp = new JPanel() {
//
// Se redefine paintComponent() para que
// a) ejecute el paintComponent() original
// b) ejecute las nuevas instrucciones gráficas
//
protected void paintComponent(Graphics g) {
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
super.paintComponent(g);
g.drawString("ABRACADABRA.", 20,50);
};
};
//
// Se fija el tamaño preferido del panel
//
jp.setPreferredSize(new Dimension(200,200));
//
// Se crea un JFrame, se le añade jp
// y se registra una clase anónima para que
// al cerrar todo vaya bien
//
JFrame jf = new JFrame("JPanelSencillo");
jf.setContentPane(jp);
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//
// Se pide que el JFrame se adapte a su contenido
//
jf.pack();
//
// Con todo preparado, se hace visible
//
jf.setVisible(true);
}
}
CERRAR VENTANA (awt)
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent evt ) {
System.exit( 0 ); }} );
CERRAR VENTANA (swing)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CHECKBOXGROUP
frame.setLayout(new FlowLayout());
CheckboxGroup a = new CheckboxGroup();
Checkbox c1 = new Checkbox("Hombre",a,true);
Checkbox c2 = new Checkbox("Mujer",a,false);
CREAR UNA LISTA Y AGREGARLE OPCIONES
List lista = new List(3);
lista.add("Uno");
lista.add("Dos");
lista.add("Tres");
lista.add("Cuatro");
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
CREAR UNA LISTA Y AGREGARLE OPCIONES
List lista = new List(3);
lista.add("Uno");
FUENTES
Font fuente=new Font("Arial", Font.BOLD, 14);
INSERTAR IMAGEN
import javax.swing.*;
public class principal extends JPanel {
b4.setIcon(new javax.swing.ImageIcon(getClass().getResource("tierra10.GIF")));
INSERTAR IMAGEN(AWT)
public class Prueba extends JFrame {
java.awt.Toolkit tk;
Image im;
public Prueba2(){
super();
this.setSize(400,400);
tk = this.getToolkit();
im = tk.getImage("mi_imagen.jpg");
Canvas cv = new Canvas(){
public void paint(Graphics g){
g.drawImage(im, 0, 0, this);
}
};
cv.setSize(200,200);
getContentPane().add(cv);
}
public static void main(String[] args){
new Prueba2().show();
}
}
LISTADO DE OPCIONES
Choice cg = new Choice ();
cg.add("Azul");
cg.add("Blanco");
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
cg.add("Negro");
frame.add(cg); LISTADO DE OPCIONES
Dialog d = new Dialog(f, "Ejemplo Cuadro de Dialogo", true);
Label dl = new Label("Presione el Botón");
Button db1 = new Button("OK");
d.add(dl);
d.add(db1);
d.pack();
VENTANA SE AJUSTE A LOS COMPONENTES
frame.pack(); GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
Eventos
frame.addCOSAListener( new ADAPTER CLASS() {
public void METODO( COSAEvent evt ) {
System.exit( 0 ); }} );
Sustiur lo negrita por lo del cuadro.
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
COMUNICACIÓN TCP/IP
ServerSocket socket = new ServerSocket (35557);
//Aceptar cliente
Socket cliente = socket.accept();
//DECLARAR OBJETOS INTERCOMUNICADORES
InputStream entrada = cliente.getIntputStream();
OutputStream salida = cliente.getOutputStream();
///objeto de entrada
DataInputStream entradaDatos = new DataInputStream (entrada);
//objeto de salida
DataOuputStream salidaDatos = new DataOutputStream (salida);
ObjectInputStream entradaObjetos = new ObjectInputStream (entrada);//recibir obejtos
ObjectOutputStream salidaObjetos = new ObjectOutputStream (salida);//enviar objetos
Envio/Lectura de datos normales (enteros, flotantes, strings)
El envío/lectura de datos normales se hace con las clases DataInputStream y DataOutputStream. No tienen ningún truco especial, basta usar el metodo adecuado (writeInt(), writeFloat(), readInt(), etc). Para strings usaremos los métodos writeUTF() y readUTF(), que envían/leen las cadenas en formato UTF.
Envio/Lectura de clases enteras
Para el envio/lectura de clases normales usaremos los métodos readObject() y writeObject() de ObjectInputStream y ObjectOutputStream. Para poder usar estos métodos las clases que enviemos deben implementar la interface Serializable.
Cerrar conexion
socket.close() p
COMUNICACION UDP
UDP:
import sun.net.*;
DatagramSocket socket = (DatagramSocket)null;
DatagramPacket out;
DatagramPacket in;
byte buffer[] = new byte[100];
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
InetAddress IP = (InetAddress)null;
// Crea una petición para enviar bytes. Intenta conseguir
socket = new DatagramSocket( puerto_recepcion);
// la dirección IP del host
IP = InetAddress.getByName( "10.0.15.3" );
out = new DatagramPacket( buffer,buffer.length,IP,puerto_emision );
socket.send( out);
System.out.println("Paquete enviado!!!");
// Consigue un controlador de fichero de entrada del socket y lee
// dicha entrada. Creamos un paquete descriptor para recibir el
// paquete UDP
in = new DatagramPacket( buffer,longitud );
// Espera a recibir un paquete
socket.receive( in );
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
Clase Thread Métodos de control:
Crear un thread (constructor Thread).
Iniciar la ejecución (start).
Detener la ejecución (suspend, interrupt, stop, sleep).
Reanudar la ejecución (resume).
Ceder el procesador (yield).
Esperar la terminación de otro thread (join). Para crear hilo, deben crear una clase, si necesitan heredar algo implenten la clase Runnable, si no, pues hereden la clase Thread, es mas facil, luego creen adentro lo que les de la gana. Pero RECUERDE crear el metodo “public void run(){}” que es el main del hilo, de alli haga lo que quiera.
GUÍA BÁSICA DE JAVA POR MIGUEL USECHE – WWW.SKATOX.COM
Descargar