Curso de Java - Lc

140
JAVA Lenguaje de programación Relator : Jaime Tobar [email protected] Diapositivas basadas en la versión original de Mohamed Mohamed

description

Curso de Java de Linux center

Transcript of Curso de Java - Lc

Page 1: Curso de Java - Lc

JAVALenguaje de programación

Relator : Jaime [email protected]

Diapositivas basadas en la versión original deMohamed Mohamed

Page 2: Curso de Java - Lc

Contenido• Introducción a Java• El lenguaje Java• Arreglos en Java• Programación OO con Java• Manejo de Errores• Streams de Entrada/Salida• Threads de Control• Red• Swing• Acceso a Base de Datos

Page 3: Curso de Java - Lc

Introducción a Java• Origen del lenguaje

– Desarrollado por SUN http://java.sun.com

– Enfocado a los electrodomésticos ( FirstPerson )

• Características de Java– Portabilidad ( medio compilado y medio interpretado )

– Robusto ( manejo de excepciones )

– Orientado a Objeto

– Seguro ( no hay punteros )

– “Simple” ( lo más simple tomando en cuenta la OO )

Page 4: Curso de Java - Lc

Introducción a Java

• Herramientas de desarrollo– JDK de SUN Microsystem

• Tipo de programas– Aplicaciones– Applet– Servlets– etc..

Page 5: Curso de Java - Lc

Introducción a Java

• Comparación

Page 6: Curso de Java - Lc

Introducción a Java

• Java Virtual Machine ( JVM )– Compilación tradicional

Page 7: Curso de Java - Lc

Introducción a Java

• Java Virtual Machine ( JVM )– Compilación JVM

Page 8: Curso de Java - Lc

El lenguaje Java

• Nuestro primer programa en Java• public class HolaMundo {

• public static void main(String[] args) {

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

• System.out.print("....en java");

• System.out.println(" en el 2005");

• }

• }

– El archivo debe llamarse HolaMundo.java

– Se compila con: javac HolaMundo.java

– Se ejecuta con: java HolaMundo

• ver: HolaMundo.java

Page 9: Curso de Java - Lc

El lenguaje Java

• El compilador de JAVA necesita que todas las clases ejecutables contengan el método main , para poderlo distinguir de otros:

• public static void main(String[] args)

Page 10: Curso de Java - Lc

Tipos de datos básicos

• Tipo Descripción Tamaño Clase

• boolean Valor lógico 1 bit Boolean• char Carácter 16 bit Character• byte Entero muy pequeño 8 bit• short Entero pequeño16 bit• int Entero normal 32 bit Integer• long Entero grande 64 bit Long• float Precisión simple 32 bit Float• double Doble precisión 64 bit Double• void Tipo vacío

Page 11: Curso de Java - Lc

El lenguaje Java• Comentarios

– // Aquí empieza un comentario

– /* Soy un comentario de

– de varias lineas */

• Identificadores ( nombres de variables )– Java distingue entre minúsculas y MAYUSCULAS

– el nombre de las variables comienza con una letra con un _ o con el signo $

– ejemplos:➡ Contador

➡ _camino

➡ $dolar

Page 12: Curso de Java - Lc

El lenguaje Java

• Operadores– Descripción Símbolo Expresión Resultado– Multiplicación * 2*4 8– Resto % 5%2 1– Suma + 2+2 4– Resta - 7-2 5– Incremento ++ 2++ 3– Decremento -- --2 1– Menos unario - -(2+4) -6

– NOTA: Hay diferencias entre ++j y j++

– ver: IncDec.java

Page 13: Curso de Java - Lc

El lenguaje Java

• Separadores••Separador Descripción

() Contienen listas de parámetros. También se utilizan para modificar la precedencia en una expresión, contener expresiones para control de flujo y realizar conversiones de tipo.

{ } Se utilizan para definir bloques de código.

[ ] Se utiliza tanto para declarar arreglos como para referenciar valores dentro de los mismos.

; Separa sentencias.

, Separa identificadores consecutivos en la declaración de variables y en las listas de parámetros.

. Separa un nombre de propiedad o método de una variable de referencia. También separa nombre de

paquete de los de un subpaquete o una clase.

Page 14: Curso de Java - Lc

El lenguaje Java

• Palabras claves• abstract continue for new switch

• boolean default goto null synchronized

• break do if package this

• byte double implements private threadsafe

• byvalue else import protected throw

• case extends instanceof public transient

• catch false int return true

• char final interface short try

• class finally long static void

• const float native super while

Page 15: Curso de Java - Lc

El lenguaje Java

• Expresiones– int i = 45;

– double j = 1.5;

– String nombre = “María”;– String nombre = null;– nombre = new String(“María”);

– boolean flag = true;– Float f = new Float(1.0);

Page 16: Curso de Java - Lc

El lenguaje Java

• Ejemplos:– String mensaje = “Hola ”+”Mundo”;

– int i = 1;– int m = i++; // m = ?– int k = i; // k = ?– int j = --k; // j = ?– boolean b = false;– boolean v = !b; // v es true o

false?

Page 17: Curso de Java - Lc

El lenguaje Java

• Clase String– Esta clase almacena una cadena de

caracteres.– Existen varios métodos que nos facilitan el

trabajo.– String cadena = new String(“Hello World”);

� cadena.length() // devuelve el largo del String� cadena.toLowerCase() // convierte el String a

minúsculas� cadena.toUpperCase() // a MAYUSCULAS� cadena.trim() // elimina los espacios en blanco al

comienzo y al final del String

Page 18: Curso de Java - Lc

El lenguaje Java

• Control de flujo– if– if( expresión booleana )

• sentencia;

– if - else– if( expresión booleana )

• sentencia;

– else• sentencia;

Page 19: Curso de Java - Lc

El lenguaje Java

– while– while ( expresión booleana )

• sentencia;

– do – while– do– sentencia;– while (expresión booleana)– for– for (inicialización; expresión booleana; paso)– sentencia;

Page 20: Curso de Java - Lc

El lenguaje Java

– switch– switch (expresión) {– case valor1: sentencia; break;– case valor2: sentencia; break;– case valor3: sentencia; break;– // ...– default: sentencia;– }

Page 21: Curso de Java - Lc

El lenguaje Java

• Ejemplos:– if( m == 1 ) {

• m++;

• flag = true;

• } else {

• m--;

• flag = false;

• }

– for( int i=0,k=1; i<10 && k < 50; i++,k +=2 ) {– sentencias;– }

Page 22: Curso de Java - Lc

El lenguaje Java

➲ Ejercicio:Haga un programa que recorra los 100 primeros números, los imprima en pantalla y diga a su lado si es impar o par

[terminal] El numero 25 es impar

ver: Numeros.java

Page 23: Curso de Java - Lc

Arreglos

• Un arreglo (array) es una manera de agrupar valores de un mismo tipo bajo un mismo nombre.

• Existen dos formas de declarar arreglos:– char [] c;– char c [];

• Crear matrices, es sencillamente agregar corchetes.– String [][] s;

Page 24: Curso de Java - Lc

Arreglos

• Ejemplos

– String [] nombres = new String[3];• nombres[0] = “María”;

• nombres[1] = “José”;

• nombres[2] = “Carmen”;

– o bien

– String [] paises = { “Chile”;”Argentina”;”Francia” };

– if( nombres.length == paises.length )

– sentencia; // Se ejecuta?

Page 25: Curso de Java - Lc

Arreglos

– archivo Arreglos.java– public class Arreglos {

–– public static void main(String[] args) {

• String[] paises = {"España","Holanda","Brasil"};

• System.out.println(paises[1]);

• System.out.println(paises.length);

– }

– }

– Modificar el archivo para que imprima los nombres de todos los paises y su largo.

– ver: Arreglos.java y Arreglos_mod.java

Page 26: Curso de Java - Lc

Interactuando con nuestro programa

•Hay varias formas de entregarle información a nuestro programa, pero las más básicas que usaremos en el comienzo son a través de la línea de comando:

•c:\java Aplicacion estos son parametros

•estos se recuperan dento del programa vía el arreglo args[] , con args[0]=”estos”y asi sucesivamente.

Page 27: Curso de Java - Lc

Interactuando con nuestro programa

La otra forma es que nuestro programa pregunte por ella:c : \ java AplicacionIngrese una linea(termina con enter)

lo ingresado se recupera via un lector de teclado:

import java.io.*;public class ......public static void main(String[ ] args) throws IOEx ception{

BufferedReader input ;input = new BufferedReader(new InputStream Reader(Sy stem.in));

Donde System.in es el teclado e input la variable que nos permitira recoger lo que se escriba.

String s = input.readLine();

Page 28: Curso de Java - Lc

Interactuando con nuestro programa

• Esta última manera acarrea ciertas rigideces que se apreciarán en el ejemplo:

• Se debe poner al principio del archivo .java:• import java.io.*;

• Se debe agregar la clausula throws IOException al main• public static void main (String args[])throws IOException

Page 29: Curso de Java - Lc

Ejercicios• Ejercicios

– Inicializar un arreglo con los primeros 100 números e imprimirlo en pantalla (el arreglo).

– Inicializar un arreglo con los primeros 100 números pares ( 0,2,4,6,..) e imprimir los primeros 10 números.

– Recibir su nombre vía línea de comandos e imprimirlo en pantalla.

– Que su programa pregunte por su nombre, lo lea del teclado y lo imprima en pantalla.

– ver: Arreglos100.java, ArreglosPar.java, leer_stdin .java y leer_args.java

Page 30: Curso de Java - Lc

Programación OO con Java

• Que es la Orientación a Objetos?– Consiste en el concepto de encapsulamiento.– Yo sé que es lo que hace una clase, pero no sé

de que manera lo hace.– En términos más sencillos, yo sé que el método

ordenarArreglos(int [] arreglo), ordena un arreglo de enteros, pero no sé que técnica usa para esto (quickSort,bubbleSort,etc..).

Page 31: Curso de Java - Lc

Programación OO con Java

• Qué son los Objetos?– Un objeto contiene en sí mismo la información y los

métodos o funciones necesarios para manipular esa información, restringiéndose solo a la información mas relevante de la entidad real o virtual que se desea modelar.

Page 32: Curso de Java - Lc

Programación OO con Java

• Abstracción

Page 33: Curso de Java - Lc

Programación OO con Java

• Qué son las Clases?– Las clases son las matrices de las que luego se

pueden crear múltiples objetos del mismo tipo.

– La clase define las variables y los métodos comunes a los objetos de ese tipo, pero luego, cada objeto tendrásus propios valores y compartirán las mismas funciones.

Page 34: Curso de Java - Lc

Programación OO con Java

• Qué son los mensaje?– Los mensajes son simples llamadas a las

funciones o métodos del objeto con el se quiere comunicar para decirle que haga cualquier cosa.

Page 35: Curso de Java - Lc

Programación OO con Java

• Cómo crear un Objeto?– Primero hay que declarar el Objeto.

• Date fecha;

• String nombre;

• Integer i;

– Después hay que inicializarlo.• fecha = new Date(2004,08,29);

• nombre = new String(“María”);

• i = new Integer(1024);

– En general se tiene:Clase variable = new Clase(Parametros constructor);

Page 36: Curso de Java - Lc

Programación OO con Java

• Constructores– Un objeto se crea usando constructores.

– public class Rectangulo {

– float x1,y1,x2,y2;

– public Rectangulo(float ex1, float ey1, float ex2, float ey2) {

– x1 = ex1;

– x2 = ex2;

– y1 = ey1;

– y2 = ey2;

– }

– }

Page 37: Curso de Java - Lc

Programación OO con Java

• Ejercicio– Cree una clase Caja que posea– Alto– Ancho– Y un método para calcular su área

– Ver: Caja.java, Cajita.java y usa_caja.java

Page 38: Curso de Java - Lc

Programación OO con Java

• Que es la herencia?– Permite crear una clase a través de una clase

existente, y esta clase tendrá todas las variables y los métodos de su ”superclase”, y además se le podrán añadir otras variables y métodos propios.

Page 39: Curso de Java - Lc

Programación OO con Java

• Existen superclases y subclases.• Las subclases heredan los métodos y

variables de las superclases.• Las superclases se transforman en padres

y abuelos de las subclases.• En Java la superclase más alta en el árbol

jerárquico es la clase Object.• Todas las clases heredan los métodos de la

clase Object.

Page 40: Curso de Java - Lc

Programación OO con Java

• Para referirse a una variable de la clase superior se utiliza super.variable.

• Para referirse a un método de las clases superiores se utiliza la sentencia super.metodo().

• Para referirse a una variable propia de la clase se utiliza la sentencia this.(varible|metodo()).

Page 41: Curso de Java - Lc

Programación OO con Java

• Ejemplo:– Nuestra superclase es Integer– Integer implementa el método suma().– Nuestra subclase será IntegerMensaje que

extiende Integer.– IntegerMensaje debe entregar el mensaje “Estoy

sumando” antes de efectuar la suma y enseguida sumar.

Page 42: Curso de Java - Lc

Programación OO con Java

– Entonces el método de suma de IntegerMensaje es distinto que el método suma de Integer

– public IntegerMensaje suma() {

– System.out.println(“Estoy sumando”);

– super.suma();

– }

– Vemos que aprovechamos que la suma se efectúa en la superclase y la reutilizamos para hacer el cálculo.

Page 43: Curso de Java - Lc

Programación OO con Java

• Cómo es el constructor de un hijo?

– public class RecV extends Rectangulo {

– public String s;

– public RecV(float ex1, float ey1, float ex2, float ey2, String cadena) {

• super(ex1,ey1,ex2,ey2);

• s = cadena;

– }

– }

Page 44: Curso de Java - Lc

Programación OO con Java

• Se deben seguir reglas:– Los constructores NO se heredan, a diferencia de los

métodos.

– Toda clase debe tener un constructor. Si no esta declarado explícitamente, por defecto tiene el constructor con 0-parámetros.

– Si una clase tiene definidos constructores, esos son los únicos que tiene, específicamente deja de existir el constructor con 0-argumentos.

Page 45: Curso de Java - Lc

Programación OO con Java

• Se deben seguir reglas:

– El cuerpo de un constructor debe llamar una vez al constructor de la clase padre, que debe preceder a cualquier otra acción en el cuerpo del constructor. Si el cuerpo de un constructor no comienza con una sentencia llamando explícitamente al constructor de la clase padre, entonces la sentencia

– super() ;

– se asume (i.e. el constructor con 0-argumentos).

Page 46: Curso de Java - Lc

Programación OO con Java

• Ejercicio– Cree una clase hijo, Cajita que incluya un

nuevo parámetro: profundidad y un nuevo método: volumen

– Ver: Cajita.java y usa_caja.java

Page 47: Curso de Java - Lc

Programación OO con Java

• Sobre carga de constructores– public Rectangulo() {

– x1 = 1;

– x2 = 2;

– y1 = 1;

– y2 = 2;

– }

– public Rectangulo(float x1,float y1) {

– this.x1 = x1;

– x2 = 2;

– this.y1 = y1;

– y2 = 2;

– }

Page 48: Curso de Java - Lc

Programación OO con Java

• Una clase implementa métodos– public float calcularArea() {

– return (x2-x1) * (y2-y1);

– }

• Un método puede ser sobrecargado– public float calcularArea(int modificador)

{

– return (x2-x1) * (y2-y1) * modificador;

– }

Page 49: Curso de Java - Lc

Programación OO con Java

• Paquete (Package)– Los paquetes son grupos relacionados de clases

e interfaces y proporcionan un mecanismo conveniente para manejar un gran juego de clases e interfaces y evitar los conflictos de nombres. Además de los paquetes de Java puede crear sus propios paquetes y poner en ellos definiciones de clases y de interfaces utilizando la sentencia package.

Page 50: Curso de Java - Lc

Programación OO con Java

• El paquete de lenguaje Java, también conocido como java.lang, contiene las clases que son el corazón del lenguaje Java.

• Para utilizar un paquete, se utiliza la sentencia import nombrePackage;

• Esta sentencia debe estar al comienzo del archivo.

Page 51: Curso de Java - Lc

Programación OO con Java

• Control de accesos a atributos y metodos– public

• Cualquier clase puede acceder a las propiedades y métodos públicos.

– protected• Sólo las clases heredades y aquellas situadas en el

mismo paquete pueden acceder a las propiedades y métodos protegidos.

– private• Las variables y métodos privados sólo pueden ser

accedidos desde dentro de la clase.

Page 52: Curso de Java - Lc

Programación OO con Java

• private protected– Sólo las clases heredades pueden acceder a las

propiedades y métodos protegidos.

Page 53: Curso de Java - Lc

Programación OO con Java

• Clases Public, Abstract, y Final– Public:

• El modificador public declara que la clase puede ser utilizada por objetos que estén fuera del paquete actual. Por defecto, una clase sólo puede ser utilizada por otras clases del mismo paquete en el que están declaradas.

– Abstract:• El modificador abstract declara que la clase es una

clase abstracta. Una clase abstracta podría contener métodos abstractos (métodos sin implementación). Una clase abstracta estádiseñada para ser una superclase.

Page 54: Curso de Java - Lc

Programación OO con Java

– Final:–Utilizando el modificador final se puede declarar que una clase es final, que no puede tener subclases. Existen (al menos) dos razones por las que se podría querer hacer esto:

– razones de seguridad.

– razones de diseño.

Page 55: Curso de Java - Lc

Programación OO con Java

• Implementación de clases abstractas– abstract class Geometria{

• El cuerpo de la clase

• Variables y métodos, incluyendo tipo de retorno;

– }

• Implementación de subclases– class Circulo extends Geometria {

• El cuerpo de la clase

• implementación de métodos superiores ( pisarlas )

• implementación de otros métodos

– }

Page 56: Curso de Java - Lc

Programación OO con Java

• Ejercicios:– Implementar la Clase Geometria ( abstracta )– La clase debe tener los siguientes métodos:

• calculaArea();• calculaPerimetro();

– Implementar las clases Rectangulo,Circulo y Triangulo que extienden la clase Geometria.

– Haga un programa que reciba como argumentos el tipo de la geometría y las dimensiones.

– ej: java calculo R 10 5• resultado: Rectángulo, área = 50 y perímetro = 30

• ver: dir Abstractas

Page 57: Curso de Java - Lc

Programación OO con Java

• Interfaz– Una interfaz es una colección de definiciones de

métodos (sin implementaciones) y de valores constantes.

– Una clase puede implementar más de una interfaz.

– Las interfaces son lo más parecido a la herencia múltiple ( pero no lo es ).

Page 58: Curso de Java - Lc

Programación OO con Java

• Ejemplo– public class Auto {

• String modelo,color;– public void recorrido() {

» System.out.println(“Santiago-Valparaiso”);

– }• }

– interface Velocidad {

• public float velocidadActual();• }

Page 59: Curso de Java - Lc

Programación OO con Java• interface Aceleracion {

– public float aceleracionActual();

– }

– public class AutoMovil extends Auto implements Velocidad,Aceleracion {

• public float velocidadActual() {

– System.out.println( “Velocidad = 100” );• }

– public float aceleracionActual() {

» System.out.println( “Aceleración = 12” );• }

– }

– ver:Prueba.java,ChaoInterface.java,HelloImpInter.ja va y HelloInterface.java

Page 60: Curso de Java - Lc

Programación OO con Java

• Clases importantes en Java– Clase Object

• boolean o.equals( Object )

• Object o.clone()

• Class o.getClass()

• String o.toString()

– Clase Character• boolean Character.isDigit( char )

• boolean Character.isLetter( char )

• boolean Character.isSpace( char )

Page 61: Curso de Java - Lc

Programación OO con Java– Clase String

• int cad.length()

• char cad.charAt( int)

• boolean cad.equals( Object )

• boolean cad.equalsIgnoreCase( Object )

–Clase StringBuffer• StringBuffer sb1 = new StringBuffer(4);

• sb1=”Hola”;

• StringBuffer sb2 = new StringBuffer(“Toma sentado.”);

• sb2.insert(6,”café ”);

• System.out.println(sb2.toString());

• Resultado: Toma café sentado.

Page 62: Curso de Java - Lc

Programación OO con Java

– Clase StringTokenizer• Permite dividir un string en pedazos(tokens).• Ejemplo:

– StringTokenizer st = new StringTokenizer( "es una prueba" , “ “ );

– while (st.hasMoreTokens()) {

– println(st.nextToken());– }

• Resultado:– es

» una» prueba

Page 63: Curso de Java - Lc

Programación OO con Java

– Ejercicio:

– Cree un programa que:

– - Primero lea el String que separa las palabras o “tokens”

– - Luego lea esas palabras y las imprima en pantalla junto con su largo.

– - Y termine su ejecución al ingresar el usuario “*”.

– ver: Tokens.java

Page 64: Curso de Java - Lc

Programación OO con Java

– Clase Random– Se utiliza para generar secuencias aleatorias.

• Random ran = new Random();– ran.nextInt(int n);

» Retorna un número aleatoria desde cero hasta n

– Clase Date

– Clase Properties

– Clase Runtime• Permite ejecutar comandos en procesos separados

• Ejemplo– Process p = Runtime.getRuntime().exec("xterm");

– ver: comando.java

Page 65: Curso de Java - Lc

Programación OO con Java

– Clase Math– Es una clase sin ningún constructor, y todos sus

métodos son estáticos

• int Math.abs( int )

• long Math.abs( long )

• float Math.abs( float )

• double Math.abs( double )

• double Math.random()

• double Math.PI

Page 66: Curso de Java - Lc

Manejo de Errores

• Excepciones–Las excepciones son la manera que ofrece Java de manejar los errores en tiempo de ejecución. Muchos lenguajes imperativos, cuando tenían un error de este clase lo que hacían era detener la ejecución del programa. Las excepciones nos permiten escribir código que nos permita manejar ese error y continuar (si lo estimamos conveniente) con la ejecución del programa.

Page 67: Curso de Java - Lc

Manejo de Errores

• try...catch...finally– try {}

• Con el bloque try marcamos en que parte del código esperamos que se genere un error.

– catch{}• Con catch atrapamos el error y enviamos algún

mensaje si es necesario.

– finally• El código en este bloque se ejecuta siempre, se

produzca o no la excepción.

Page 68: Curso de Java - Lc

Manejo de Errores

– Un bloque try puede tener asignado más de un bloque catch

– Clase Exception• String e.getMessage()

– Devuelve el mensaje detallado si existe o null en caso contrario.

• void e.printStackTrace()– Escribe por la salida de error estándar una lista que

nos permitirá localizar donde se generó el error. Es muy útil para depurar, pero no es conveniente que lo usuarios finales vean estas cosas.

Page 69: Curso de Java - Lc

Manejo de Errores

• Ejercicio– Construya su propia excepción que notifique en

pantalla que fue creada

– Haga un programa que cree esa excepción

– Modifique su excepción y ahora implemente el constructor que reciba el mensaje

– Use el programa para ver los errores que produce

– Ahora encapsule su código con try y catch

• ver: Hello.java y FileIsCorruptedException.java

Page 70: Curso de Java - Lc

Streams de Entrada/Salida

• Los Canales de I/O Estándar– Entrada estandard: referenciado por System.in•utilizado para la entrada del programa, típicamente lee la entrada introducida por el usuario.

– Salida estandard: referenciado por System.out•utilizado para la salida del programa, típicamente muestra información al usuario.

– Error estandard: referenciado por System.err•utilizado para mostrar mensajes de error al usuario.

Page 71: Curso de Java - Lc

Streams de Entrada/Salida

• I/O: Leer y Escribir–Frecuentemente los programas necesitan traer información desde una fuente externa o enviar información a un fuente externa. La información puede estar en cualquier parte, en un archivo, en disco, en algún lugar de la red, en memoria o en otro programa. También puede ser de cualquier tipo: objetos, caracteres, imágenes o sonidos.

Page 72: Curso de Java - Lc

Streams de Entrada/Salida

• En este capítulo solamente analizaremos el caso de los streams de archivos.

• Clase File– En esta clase se define un archivo o un

directorio.– Ejemplo:

• File archivo = new File(“archivo.txt”);

• File directorio = new File(“directorio”);

Page 73: Curso de Java - Lc

Streams de Entrada/Salida

• import java.io.*;

– public class Copiar {

– public static void main(String[] args) throws IOExc eption {

– File inputFile = new File("entrada.txt");

– File outputFile = new File("salida.txt");

– FileReader in = new FileReader(inputFile);

– FileWriter out = new FileWriter(outputFile);

– int c;

– while ((c = in.read()) != -1)

– out.write(c);

– in.close();

– out.close();

– }

– }

Page 74: Curso de Java - Lc

Streams de Entrada/Salida

• PipedWriter y PipedReader.• SequenceInputStream

– Crea un sólo stream de entrada desde varias fuentes de entrada ( se utiliza para concatenar ).

• FilterInputStream y FilterOutputStream.

Page 75: Curso de Java - Lc

Streams de Entrada/Salida

• Ejercicio– Escribir un programa que lea los contenidos de un

archivo e imprima en la salida estos contenidos en MAYUSCULAS.

– Hint:• Utilice para la lectura:

– BufferedReader input = new BufferedReader( new FileReader( archivo ) );

– PrintWriter output = new PrintWriter(new FileWriter("copia.txt"));

– ver: LeerArchivo.java y ManipularArchivo.java

Page 76: Curso de Java - Lc

Streams de Entrada/Salida• Contructor:• File(File parent, String child)• Creates a new File instance from a

parent abstract pathname and a child pathname string.

• File(String pathname)• Creates a new File instance by

converting the given pathname string into an abstract pathname.

• File(String parent, String child)• Creates a new File instance from a

parent pathname string and a child pathname string.

Page 77: Curso de Java - Lc

Streams de Entrada/Salida• getName()

• Returns the name of the file or directory denoted by this abstract pathname.

• getParent()• Returns the pathname string of this abstract pathname's parent, or

null if this pathname does not name a parent directory.• isDirectory()• Tests whether the file denoted by this abstract pathname is a

directory.• length()• Returns the length of the file denoted by this abstract pathname.• list(FilenameFilter filter)• Returns an array of strings naming the files and directories in the

directory denoted by this abstract pathname that satisfy the specified filter.• listFiles(FileFilter filter)• Returns an array of abstract pathnames denoting the files and

directories in the directory denoted by this abstract pathname that satisfy the specified filter.

Page 78: Curso de Java - Lc

Streams de Entrada/Salida

• Ejercicio– Haga un programa que reciba como

parámetro el nombre de un directorio.– Este programa debe imprimir la lista de los

directorio y archivos que los componen.– Su programa debe desplegar el tamaño de

los archivos.– Modifique su programa para que imprima la

lista de los sub directorios.

– ver: readdir.java

Page 79: Curso de Java - Lc

Threads de Control

• Programación secuencial– Cada línea del programa se ejecuta en el mismo orden en el

cual fue invocada.

• Programación paralela– Una parte del programa puede invocar a uno o más proceso

que se ejecute en forma paralela.– Generalmente se utilizan en una arquitectura multi

procesadores.– Los S.O. modernos implementan multi-procesos sin la

necesidad de multi procesadores.

Page 80: Curso de Java - Lc

Threads de Control

• Java provee un mecanismo de Threads, que permite ejecutar varios procesos en forma paralela.

• La manera de usar procesos paralelos es extendiendo la clase Thread e implementar el método run();

• Para la invocación se utiliza el método start();

Page 81: Curso de Java - Lc

Threads de Control

• Ejemplo– public class DosThreads {

• public static void main(String[] args){– new ThreadsSimple("Santiago").start();» new ThreadsSimple("Arica").start();– }

– }

– Donde la clase ThreadsSimple implementa un proceso en paralelo.

Page 82: Curso de Java - Lc

Threads de Control• public class ThreadsSimple extends Thread {

– public ThreadsSimple(String str) {

• super(str);

• }

• public void run() {

– for (int i = 0; i < 10; i++) {

» System.out.println(i + " " + getName());

» try {

» sleep((int) (Math.random() * 1000));

» } catch (InterruptedException e) {}

– }

– System.out.println("HECHO! " + getName());

• }

– }

• ver: ThreadsImpPack.java y ThreadsSimple.java

Page 83: Curso de Java - Lc

Red

• Trabajo en Red

• El entorno Java es altamente considerado en parte por su capacidad para escribir programas que utilizan e interactúan con los recursos de Internet y la World Wide Web.

Page 84: Curso de Java - Lc

Red

• Para transmisión de datos por Red, se utiliza uno de dos protocolos:– TCP:

• TCP es un protocolo basado en conexión que proporciona un flujo fiable de datos entre dos computadores.

– UDP:• UDP es un protocolo que envía paquetes de datos

independientes, desde un computador a otro sin garantías sobre su llegada.

Page 85: Curso de Java - Lc

Red

• Para establecer una conexión de se debe especificar el protocolo y el puerto.

Page 86: Curso de Java - Lc

Red

• URL– URL es un acrónimo que viene de Uniform

Resource Locator y es una referencia (una dirección) a un recurso de Internet.

– http://java.sun.com/

• Clase URL– La clase URL proporciona varios métodos que

permiten preguntar a los objetos URL.

Page 87: Curso de Java - Lc

Red

• Crear un Objeto URL– URL linuxCenter = new URL("http://ww.linuxcenter.cl");– URL(URL URLbase, String URLrelativa)

•URL linuxProductos = new URL (”linuxCenter,”productos.html”)

➡Existen más constructores que pueden ser vistos en la API de JAVA.

Page 88: Curso de Java - Lc

Red

• Excepciones en los constructores de URLs

– try {– URL myURL = new URL(. . .)– } catch (MalformedURLException e) {– . . .– // Aquí va el código del

manejador de excepciones– . . .– }

Page 89: Curso de Java - Lc

Red– getProtocol()

• Devuelve el componente identificador de protocolo de la URL.

–getHost()• Devuelve el componente nombre del host de la

URL.

–getPort()• Devuelve el componente número del puerto de la

URL. Este método devuelve un entero que es el número de puerto. Si el puerto no está selccionado, devuelve -1.

–getFile()• Devuelve el componente nombre de fichero de la

URL.

Page 90: Curso de Java - Lc

Red– getRef()

• Obtiene el componente referencia de la URL.

–Ejemplo:– import java.net.*;

– class ParseURL {

– public static void main(String[] args) {

– URL aURL = null;

– try {

– aURL = new URL("http://java.sun.com:80/tutorial/intro.html#DOW NLOADING");

– System.out.println("protocol = " + aURL.getProtocol ());

– System.out.println("host = " + aURL.getHost());

– System.out.println("filename = " + aURL.getFile());

– System.out.println("port = " + aURL.getPort());

– System.out.println("ref = " + aURL.getRef());

– } catch (MalformedURLException e) {

– System.out.println("MalformedURLException: " + e);

– }

– }

– }

Page 91: Curso de Java - Lc

Red

– Resultado del ejemplo:• protocol = http

• host = java.sun.com

• filename = /tutorial/intro.html

• port = 80

• ref = DOWNLOADING

Page 92: Curso de Java - Lc

Red• Leer desde una URL

– impo rt java.net. *;

– import java.io.*;

– class OpenStreamTest {

– public static void main(String[] args) {

– try {

– URL yahoo = new URL("http://www.yahoo.com/");

– DataInputStream dis = new DataInputStream(yahoo.ope nStream());

– String inputLine;

– while ((inputLine = dis.readLine()) != null) {

– System.out.println(inputLine);

– }

– dis.close();

– } catch (MalformedURLException me) {

– System.out.println("MalformedURLException: " + me);

– } catch (IOException ioe) {

– System.out.println("IOException: " + ioe);

– }

– }

– }

Page 93: Curso de Java - Lc

Red• Resultado• <html><head>

• <script language=javascript>

• var now=new Date,t1=0,t2=0,t3=0,t4=0,t5=0,t6=0,hp=0 ,cc='',ylp='';t1=now.getTime();

• </script>

• <title>Yahoo!</title>

• <meta http-equiv="PICS-Label" content='(PICS-1.1 "h ttp://www.icra.org/ratingsv02.html" l r (cz 1 lz 1 nz 1 oz 1 vz 1) gen true for "http://www.yahoo .com" r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l r (n 0 s 0 v 0 l 0) gen true for "http://www.yahoo.com" r (n 0 s 0 v 0 l 0))'>

• <base href="http://www.yahoo.com/_ylh=X3oDMTEwZGh2NmNjBF9 TAzI3MTYxNDkEdGVzdAMwBHRtcGwDaW5kZXgtdGJs/" target=_top>

• <script language=javascript><!--

• lck='',sss=1101710360,ylp='http://geo.yahoo.com/ser v2?t=1101710360&_ylp=A9htdkYYxKpBr7MAdk71cSkA';//--></script><script language=javascript>

• var b,d,l='',n='0',r,s,y;

• .

• .

• <script language=javascript>d.sf1.p.focus();</scrip t>

• <script language=javascript>

• now=new Date;

• t4=now.getTime();

• </script>

• </body>

Page 94: Curso de Java - Lc

Red

• La Clase URL me permite interactuar a nivel de la WEB.

• La Clase Socket me permite interactuar a nivel de cualquier aplicación.

• Java nos provee de herramientas para trabajar con la internet en una libreria:

–java.net.*

Page 95: Curso de Java - Lc

Red

Hola

Chao

Hola

Chao

Page 96: Curso de Java - Lc

Red

•Usando la clase de java ServerSocket y threads, se puede crear un servidor que atienda simultáneamente a más de un cliente.

•Un ServerSocket espera un pedido por medio de la red, aceptando ese pedido y ejecutando lo que el programador desee, llegando incluso a devolver un resultado al cliente.

Page 97: Curso de Java - Lc

Red

•El ServerSocket pone nuestra disposición métodos que permiten capturar la llegada del Socket cliente.••

Page 98: Curso de Java - Lc

Red

• Ejemplo: Sockets

• Cree un programa que se conecte al servidor que tiene corriendo el profesor usando la IP que le dirá.

• ver: EchoServer.java y EchoClient.java

Page 99: Curso de Java - Lc

Swing/JFC

• JFC es la abreviatura de Java Foundation Classes, que comprende un grupo de características para ayudar a construir interfaces gráficos de usuario (GUIs).

• Los componentes Swing– Incluye todo desde botones hasta splitpanes y

tablas.

Page 100: Curso de Java - Lc

Swing/JFC

• Soporte de Aspecto y Comportamiento Conectable– Le ofrece a cualquier componente Swing una

amplia selección de aspectos y comportamientos. Por ejemplo, el mismo programa puede usar el Aspecto y Comportamiento Java o el Aspecto y Comportamiento Windows.

Page 101: Curso de Java - Lc

Swing/JFC

• API de Accesibilidad– Permite tecnologías asistivas como lectores de

pantalla y display Braille para obtener información desde la interfaz de usuario.

• Java 2D API– Permite a los desarrolladores incorporar

fácilmente gráficos 2D de alta calidad, texto, e imágenes en aplicaciones y applets Java.

Page 102: Curso de Java - Lc

Swing/JFC

• Soporte de Drag and Drop– Proporciona la habilidad de arrastrar y soltar entre

aplicaciones Java y aplicaciones nativas.

• Para utilizar JFC se importan las bibliotecas swing.– Import javax.swing.*;

Page 103: Curso de Java - Lc

Swing/JFC

• Se puede simular las interfaces gráficas en Java como un árbol– La raíz de este árbol están las clases

contenedoras, son tres :• JFrame.

• JDialog.

• JApplet.

Page 104: Curso de Java - Lc

Swing/JFC

– El tallo de este árbol, lo componen las clases llamadas contenedoras intermedio, como:

• JPanel.

• JScrollPane.

• JTabbedPane.

Page 105: Curso de Java - Lc

Swing/JFC

– Las hojas del árbol están compuestas por los componentes atómicos:

• JButton.

• JLabel.

• JComboBox.

• JTextField.

• JTable.

• ....

Page 106: Curso de Java - Lc

Swing/JFC

• Para crear un GUI, se deben cumplir los siguientes pasos:– Crear un Contenedor.– Asignar un contenedor intermedio a él.– Asignar uno o varios componentes atómicos al

contenedor intermedio.

Page 107: Curso de Java - Lc

Swing/JFC• Ejemplo:

– import javax.swing.*;

• public class VentanaSwing extends JFrame {

• public VentanaSwing(){

• super("Primera Ventana");

• setLocation(100,100);

• setSize(200,100);

• show();

• }

• public static void main(String[] arg) {

• new VentanaSwing();

• System.out.println("He creado la ventana");

• }

• }

Page 108: Curso de Java - Lc

Swing/JFC

• Una aplicación que utiliza Swing, indirectamente está utilizando Threads.

• Una aplicación gráfica siempre debe estar a la espera de algún evento, apretar una tecla y/o mover el mouse (también presionarlo).

• Existen procesos que están permanentemente atentos a la espera de estos eventos.

Page 109: Curso de Java - Lc

Swing/JFC

• Estos escuchadores de eventos funcionan en paralelo con la aplicación swing.

• Por lo tanto la manera más seguro de ejecutar una aplicación swing es declarándola como un Thread.

Page 110: Curso de Java - Lc

Swing/JFC• Forma segura de correr una aplicación

swing– public static void main(String[] args) {

–javax.swing.SwingUtilities.invokeLater(new Runnable() {

– public void run() {

– // Invocar la aplicación

– }

– });

– }

Page 111: Curso de Java - Lc

Swing/JFC• Crear un botón

– JButton button = new JButton("Soy un boton");

– button.setMnemonic(KeyEvent.VK_B);

– button.addActionListener(new ActionListener()

– {

• public void actionPerformed(ActionEvent e)

• {

– numClicks++;– label.setText(labelPrefix + numClicks);

• }– });

Page 112: Curso de Java - Lc

Swing/JFC• Manejo de eventos

– ActionListener• El usuario pulsa un botón, presiona Return mientras teclea

en un campo de texto, o elige un ítem de menú.

– WindowListener• El usuario elige un frame (ventana principal).

– MouseListener• El usuario pulsa un botón del ratón mientras el cursor está

sobre un componente.

– MouseMotionListener• El usuario mueve el cursor sobre un componente.

Page 113: Curso de Java - Lc

Swing/JFC

– ComponentListener– El componente se hace visible.

–FocusListener• El componente obtiene obtiene el foco del teclado.

–ListSelectionListener• Cambia la tabla o la selección de una lista.

• Para manejar los eventos es necesario importar las bibliotecas de java.awt.*;

Page 114: Curso de Java - Lc

Swing/JFC• Crear una etiqueta

– JLabel label = new Jlabel(“Una etiqueta");

• Crear TextField– JTextField texto = new JtextField("Texto”);

– texto.setToolTipText("Escriba un texto");

• Crear ComboBox– JComboBox comboBox = new JcomboBox(array);

– comboBox.setSelectedIndex(2);

Page 115: Curso de Java - Lc

Swing/JFC

• Ejemplo

JMenuJTextField

JButton

JLabel

JComboBox

JFrame

JPane

Page 116: Curso de Java - Lc

Swing/JFC

• Ejercitar swing con los componentes presentados usando la informacion disponible en la API de JAVA.

– ver: Swing*.java

Page 117: Curso de Java - Lc

Acceso a Base de Datos

• JDBC fue diseñado para mantener sencillas las cosas sencillas.

• JDBC nos permite hacer una conexión hacia una Base de datos.

• Podemos realizar cualquier tipo de consultas, modificación y creación de nuevas tablas.

Page 118: Curso de Java - Lc

Acceso a Base de Datos

• Los pasos necesarios:– Cargar el driver ( el driver se obtiene del

proveedor de la BD ).– Establecer la conexión.– Crear sentencias.– Ejecutar las sentencias.

Page 119: Curso de Java - Lc

Acceso a Base de Datos• Pero que hacer con el driver? Como lo uso?• La mejor respuesta disponible es esta:

– "Once you have un-archived the distribution archive, you can install the driver in one of three ways:

‣ Either copy the "com" and "org" subdirectories and all of their contents to anywhere you like, and put the directory holding the "com" and "org" subdirectories in your classpath,

‣ or put mysql-connector-java-[version]-bin.jar in your classpath, either by adding the FULL path to it to your CLASSPATH environment variable,

‣ or by copying the .jar file to $JAVA_HOME/jre/lib/ext."

Page 120: Curso de Java - Lc

Acceso a Base de Datos

• Pero hay una opción más sencilla en Windows:

• Descomprimir el .zip, y mover el .java a ese directorio.

Page 121: Curso de Java - Lc

Acceso a Base de Datos

• Cargar el driver– En nuestro caso usaremos la BD MySql, el driver se

puede obtener desde : http://www.mysql.org

– La carga del driver consiste en esta linea:

– Class.forName("com.mysql.jdbc.Driver").newInstance( );

Page 122: Curso de Java - Lc

Acceso a Base de Datos

• La línea anterior es solamente válida para MySql.

• Establecer una conexión

– String url = ”jdbc:mysql://localhost”

– Connection con = DriverManager.getConnection(url,"login","pass");

Page 123: Curso de Java - Lc

Acceso a Base de Datos

• Crear sentencias– Un objeto Statement es el que envía nuestras

sentencias SQL al controlador de la base de datos.

– Simplemente creamos un objeto Statement y lo ejecutamos, suministrando el método SQL apropiado con la sentencia SQL que queremos enviar.

Page 124: Curso de Java - Lc

Acceso a Base de Datos

– Para una sentencia SELECT, el método a ejecutar es executeQuery.

– Para sentencias que crean o modifican tablas, el método a utilizar es executeUpdate.

– Statement stmt = con.createStatement();– Donde con es la conexión establecida

anteriormente.

Page 125: Curso de Java - Lc

Acceso a Base de Datos

• Ejecutar sentencias– En este momento stmt existe, pero no tiene

ninguna sentencia SQL que pasarle al controlador de la base de datos.

– stmt.executeQuery(“SELECT * FROM tabla”);– stmt.executeUpdate(“INSERT INTO tabla

VALUE .....”);

Page 126: Curso de Java - Lc

Acceso a Base de Datos

• Recuperar valores desde una tabla– JDBC devuelve los resultados en un objeto ResultSet.

– ResultSet rs = stmt.executeQuery("SELECT * FROM tabla");

– La variable rs, que es un ejemplar de ResultSet, contiene las filas de tabla.

Page 127: Curso de Java - Lc

Acceso a Base de Datos

– Para recorrer todas las filas existentes en rs, utilizamos el método next().

–while( rs.next() ) {• // código• }–Para recuperar una columna, se puede

utilizar tanto el nombre de la columna como su posición.

• rs.getString(“nombre”);– rs.getString(1);

Page 128: Curso de Java - Lc

Acceso a Base de Datos

• Las sentencias que podemos ejecutar pueden ser tan complejas como nos sea posible.

• La labor de los métodos getString, getFloat, etc.., es tranformar los valores de la base de datos a valores de JAVA.

Page 129: Curso de Java - Lc

Acceso a Base de Datos

• Ejercicios– Descargue el driver de mysql de www.mysql.org– Descomprimalo– Haga un programa que se conecte a la base de

datos triskelion que esta corriendo en el computador del profesor.

– Use el login alumno y el password java.– Haga una consulta sencilla, usando el esquema

que se le entrego al inicio de la clase.– Imprima el resultado en la pantalla.– Ejecute usando‣ java -cp $CLASSPATH:mysql-...-.jar nombre_prog

Page 130: Curso de Java - Lc

Acceso a Base de Datos

• ResultSetMetaData– Como su nombre lo indica, nos da informaci’on

sobre los datos.– El ResultSet no guarda información como los

nombres de las columnas, los tipos SQL de los datos o la cantidad de columnas.

•ResultSetMetaData rsmd = rs.getMetaData();

– donde rs es nuestro objeto ResultSet.– Existen otros métodos disponibles en la API.

Page 131: Curso de Java - Lc

Acceso a Base de Datos

• Ejercicios– Haga un programa que se conecte a la base de

datos triskelion que esta corriendo en el computador del profesor.

– Use el login alumno y el password java.– Revise una tabla completa, usando el esquema

que se le entrego al inicio de la clase.– Guarde la tabla, con los nombres de las

columnas en un archivo csv en su computador.– Ejecute usando‣ java -cp $CLASSPATH:mysql-...-.jar nombre_prog

Page 132: Curso de Java - Lc

JAR

• El formato de archivos JAR permite empaquetar varios archivos en un sólo archivo. Típicamente un archivo JAR contendrá los archivos de clases y los recursos auxiliares asociados con los applets y aplicaciones. Estos recursos auxiliares podrían incluir, por ejemplo, archivos de imagen y sonido que sean utilizados por una aplicacion.

Page 133: Curso de Java - Lc

JAR

• El formato de archivos JAR proporciona muchos beneficios:– Seguridad: Puede firmar digitalmente el contenido

de un archivo JAR. Los usuarios que reconozcan su firma pueden permitir a su software privilegios de seguridad que de otro modo no tendría.

Page 134: Curso de Java - Lc

JAR

– Disminuir el tiempo de descarga: Si sus applets están empaquetados en un archivo JAR, los archivos de clases y los recursos asociados pueden ser descargados por el navegador en una sola transacción HTTP sin necesidad de abrir una nueva conexión para cada fichero.

Page 135: Curso de Java - Lc

JAR

– Compresión: El formato JAR permite comprimir los archivos para ahorrar espacio.

– Portabilidad: El mecanismos para manejar los ficheros JAR son una parte estándar del corazón del API de la plataforma Java.

Page 136: Curso de Java - Lc

JAR

– Empaquetado sellado : Los paquetes almacenados en archivos JAR pueden ser sellados opcionalmente para que el paquete puede reforzar su consistencia. El sellado de un paquete dentro de un archivo JAR significa que todas las clases definidas en ese paquete deben encontrarse dentro del mismo archivo JAR.

Page 137: Curso de Java - Lc

JAR

– Empaquetado versionado : Un archivo JAR puede contener datos sobre los archivos que contiene, como información sobre el vendedor o la versión.

Page 138: Curso de Java - Lc

JAR

• Uso:– Para crear un fichero JAR

• jar cf jar-file input-file(s)

– Para ver el contenido de un fichero JAR • jar tf jar-file

– Para extraer el contenido de un fichero JAR • jar xf jar-file

– Para ejecutar una aplicación empaquetada en un fichero JAR • java -cp app.jar MainClass

• java -jar app.jar

Page 139: Curso de Java - Lc

JAR

• Firmar archivos JAR– Se utiliza la firma de archivos JAR para

autentificar al proveedor del software.– Si una aplicación necesita ejecutar acciones

sensibles al sistema, la plataforma impide dichas acciones a menos que el archivos JAR estéfirmado y verificado por una fuente confiable.

Page 140: Curso de Java - Lc

Fin

Curso dictado por Jaime Tobar [email protected]