jump to navigation

Vaciar el contenido de un fichero con Java Julio 31, 2010

Publicado por lineadecodigo en : Java , Añadir un comenario

Nos llegaba una pregunta vía comentarios sobre como vaciar el contenido de un fichero con Java. Y nos pusimos manos a la obra.

El procedimiento es muy sencillo. Lo primero que tenemos que hacer es abrir un stream de escritura sobre el fichero. Para ello necesitaremos de un FileWriter y un BufferedWriter.

  1. BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));

Una vez que tenemos el stream sobre el BufferedWriter lo que vamos a hacer es escribir una línea vacía. Para ello utilizamos el método .write().

  1. bw.write("");

Así lo que conseguimos es machacar todo el contenido que pudiese existir en el fichero. Vaciándolo de su contenido actual. Ahora, no hay que olvidarnos de cerrar nuestro fichero. Esto lo hacemos mediante el método .close() del BufferedWriter.

  1. bw.close();

Y ya hemos conseguido vaciar el contenido de un fichero con Java.

Ojo, hay que tener cuidado de que el fichero exista o se nos generará una excepción FileNotFoundException o IOException.

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java IO

Comparar el contenido de dos ficheros con Java Julio 30, 2010

Publicado por lineadecodigo en : Java , Añadir un comenario

En este ejemplo vamos a ver como podemos comparar el contenido de dos ficheros de texto con Java y comprobar si el contenido es el mismo o es diferente.

Lo primero será crear una clase del tipo FileReader. Esta clase nos va a ayudar a acceder al contenido de los ficheros, conjuntamente con un BufferedReader. De esta forma crear un stream de un fichero a un BufferedReaderr lo podemos hacer con el siguiente código:

  1. FileReader fr1 = new FileReader("fichero1.txt");

Como tenemos dos ficheros, repetimos la misma sentencia para el segundo fichero:

  1. FileReader fr1 = new FileReader("fichero1.txt");
  2. FileReader fr2 = new FileReader("fichero2.txt");
  3.  

Ahora que tenemos un BufferedReader será sencillo ir leyendo el contenido del fichero, ya que solo tendremos que ir lanzando el método readLine() hasta que lleguemos al final de los ficheros.

Así recorreremos los ficheros mientras lo leído no sea null, ya que significará que hemos llegado al final del fichero, o bien que asumamos que los ficheros siguen siendo iguales, lo cual controlaremos mediante una variable de bandera que denominaremos iguales.

De esta manera el bucle para recorrer los ficheros será de la siguiente forma:

  1. sCadena1 = bf1.readLine();
  2. sCadena2 = bf2.readLine();
  3.  
  4. while ((sCadena1!=null) && (sCadena2!=null) && iguales) {...}

Dentro del bucle compararemos las líneas almacenadas en las cadenas. Si las líneas son iguales asumiremos que los ficheros siguen siendo iguales, leeremos e iteraremos otra vez.

Si las líneas no son iguales significa que el contenido es diferente. En ese caso cambiaremos el valor de la variable iguales a "false" para provocar una salida del bucle.

El código quedará de la siguiente manera:

  1. sCadena1 = bf1.readLine();
  2. sCadena2 = bf2.readLine();
  3.  
  4. while ((sCadena1!=null) && (sCadena2!=null) && iguales) {
  5.  
  6. if (!sCadena1.equals(sCadena2))
  7. iguales = false;
  8.  
  9. sCadena1 = bf1.readLine();
  10. sCadena2 = bf2.readLine();
  11. }

Una vez hemos salido del bucle sabremos que los ficheros son iguales si la variable iguales sigue siendo true y si hemos llegado al final de la lectura de los dos ficheros, es decir, que las variables de lectura contengan un valor null. Así tendremos el siguiente código:

  1. if ((iguales) && (sCadena1==null) && (sCadena2==null))
  2. System.out.println("Los ficheros son iguales");
  3. else
  4. System.out.println("Los ficheros son diferentes");

En todo este código tenemos que tener cuidado ya que podemos tener excepciones FileNotFoundException, si los fichero a leer no existen o IOException si tenemos problemas en la lectura de los mismos. Es por ello que todo el código irá dentro de su estructura try-catch.

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java IO

Sumar matrices en Java Julio 28, 2010

Publicado por lineadecodigo en : Java , Añadir un comenario

Seguimos con los ejemplos de matrices, ahora que ya hemos visto como crear una matriz con Java. En este caso vamos a realizar la suma de dos matrices.

Para llevar a cabo el ejemplo hemos definido un método Java que nos permite sumar las matrices. La signatura de dicho método será la siguiente:

  1. public static int[][] sumarmatrices (int[][] m1,int[][] m2) throws Exception {...}

Como podemos ver el método Java recibe dos matrices y devuelve una, que será el resultado de la misma. Por otro lado puede generar una Exception. Este caso será cuando las dimensiones de las matrices sean diferentes. Ya que cuando las dimensiones de las matrices son diferentes, estas no se pueden sumar.

Así la comprobación de las dimensiones de las matrices las haremos apoyándonos en la propiedad length:

  1. if ((m1.length == m2.length) && (m1[0].length==m2[0].length)){...}

En el caso de no coincidir los tamaños, es cuando elevamos la Exception.

  1. if ((m1.length == m2.length) && (m1[0].length==m2[0].length)){
  2. ...
  3. } else
  4. throw new Exception();}

En caso afirmativo procederemos a sumar los elementos de las matrices. Hay que recordar que la suma de las matrices es la suma de todos sus elementos posición a posición. Por lo tanto la suma es sencilla. Solo tenemos que recorrer todos los elementos y dejar el resultado en la matriz destino.

Así, lo primero es crear una matriz resultado de las mismas dimensiones:

  1. int[][] suma = new int[m1.length][m1[0].length];

Para recorrer los elementos nos apoyamos en un bucle for y, nuevamente, en la propiedad length.

  1. for (int x=0; x < m1.length; x++) {
  2. for (int y=0; y < m1[x].length; y++) {
  3. suma[x][y]=m1[x][y]+m2[x][y];
  4. }
  5. }

Ahora solo nos quedará devolver la matriz con el resultado de la suma.

  1. return suma;

Invocar el método es sencillo. Solo hay que tener en cuenta que puede soltar una Exception y por lo tanto lo deberemos de invocar desde un método try-catch

  1. int [][] matriz1 = {{2,4,4},{6,6,9}};
  2. int [][] matriz2 = {{2,4,4},{6,6,9}};
  3. int [][] matriz = new int[3][3];
  4.  
  5. try {
  6. matriz = sumarmatrices(matriz1,matriz2);
  7. pintarmatriz(matriz);
  8. } catch(Exception e){
  9. System.out.println("Matrices de diferente dimensión");
  10. }
|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java

Crear una matriz en Java Julio 9, 2010

Publicado por lineadecodigo en : Java , 4 comentarios

Una matriz matemática es una tabla bidimensional de números. Las matrices pueden sumarse, multiplicarse,... Y suelen ser utilizadas para describir sistemas de ecuaciones lineales. Leer más sobre matrices en Wikipedia.

Si queremos representar una matriz en Java hay que crear un array bidimensional. Por ejemplo para declarar una matriz de 3x3 haríamos lo siguiente:

  1. int matriz[][] = new int[3][3];

Ahora procedemos a cargar la matriz con valores:

  1. matriz[0][0] = 2;
  2. matriz[0][1] = 4;
  3. matriz[0][2] = 4;
  4. matriz[1][0] = 6;
  5. matriz[1][1] = 6;
  6. matriz[1][2] = 9;
  7. matriz[2][0] = 8;
  8. matriz[2][1] = 10;
  9. matriz[2][2] = 12;

Hay que recordar que los elementos empiezan a numerarse por 0. Así la esquina superior izquierda de la matriz será el elemento [0][0] y la esquina inferior derecha será el [2][2].

Podemos crear e instanciar la matriz en una única línea:

  1. int [][] matriz = {{2,4,4},{6,6,9},{8,10,12}};

De igual manera, si nos apoyamos en el método .lenght del array podremos listar el contenido de la matriz

  1. for (int x=0; x < matriz.length; x++) {
  2. for (int y=0; y < matriz[x].length; y++) {
  3. System.out.println (matriz[x][y]);
  4. }
  5. }
|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java

Dividir dos números con Java Junio 10, 2010

Publicado por lineadecodigo en : Java , Hasta ahora 1 comentario

Dentro del grupo de ejemplos básicos y siendo otro que nos le pide mucha gente que empieza con la programación en Java, hoy vamos a explicar como hacer un programa que nos ayude a dividir dos números. (Discúlpenme los expertos).

Lo primero será definir las variables. En el artículo sobre Sumar dos números con Java veíamos que las variables eran de tipo int. Pero en el caso de la división hay que tener cuidado, ya que el resultado de una división puede dar lugar a un número con decimales. Por ejemplo:

9/2 = 4.5

Es por ello que vamos a utilizar tipos float para los números:

  1. float numero1 = 0;
  2. float numero2 = 0;
  3. float resultado;

Una vez definidas las variables pasaremos a solicitar los números al usuario apoyándonos en un objeto Scanner. Instanciamos el Scanner, con la entrada del sistema (System.in) como parámetro:

  1. Scanner reader = new Scanner(System.in);

Ahora pasamos a leer los números mediante el método .nextFloat. El cual leerá de la consola el dato y lo almacenará en nuestras variables:

  1. System.out.println("Introduce el primer número:");
  2. numero1 = reader.nextFloat();
  3.  
  4. System.out.println("Introduce el segundo número:");
  5. numero2 = reader.nextFloat();

Ya solo nos quedará ejecutar la división y mostrarla en la pantalla.

  1. esultado = numero1/numero2;
  2. System.out.println("La división es " + numero1 + " / " + numero2 + " = " + resultado);

Si están aprendiendo Java, es un buen ejemplo para empezar. Codificarlo, compilarlo y probarlo. A ver que tal.

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java Básico

Convertir un array de caracteres en un String Junio 6, 2010

Publicado por lineadecodigo en : Java , 4 comentarios

En el ejemplo Convertir un array en un String con Java veíamos el procedimiento a seguir para coger un array de String y convertirlo en una cadena. Pero, si el array que estamos manejando es de caracteres en vez de String, el procedimiento será mucho más sencillo.

El array de caracteres:

  1. char miarray[] = {'A','V','I','L','A'};

Ahora utilizamos el método .valueOf() de la clase String pasando el array de caracteres como parámetro:

  1. System.out.println(String.valueOf(miarray));

Y ya tenemos convertir el array de caracteres en un String

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java

Cerrar una Ventana con Java Swing Junio 4, 2010

Publicado por lineadecodigo en : Java , 2 comentarios

Una vez visto el ejemplo de Hola Mundo con Java Swing vamos a dar paso a realizar más cosas con Java Swing. En este caso, partiendo del ejemplo de Hola Mundo, vamos a ver como podemos cerrar una ventana con Java Swing. De esta manera controlaremos las acciones a realizar una vez que el usuario cierre la ventana.

La idea principal consiste en escuchar el evento windowClosing. El evento windowClosing es un evento del adaptador de ventana o WindowAdapter.

Recuerda que para la gestión de eventos tenemos Interfaces y Adaptadores. Los interfaces nos obligan a codificar todos los eventos a gestionar, mientras que en el Adaptador solo tenemos que gestionar el evento que necesitemos.

Pero lo primero es utilizar el método .addWindowListerner para suscribirnos a los eventos que se produzcan en la ventana. Así, en el constructor de nuestro programa utilizaremos dicho método:

  1. public CerrarVentana(){
  2. addWindowListener(new WindowAdapter() {...});
  3. }

Como podemos comprobar en el código, al método .addWindowListener le estamos pasando una clase WindowAdapter.

El método asociado al cierre de la ventana es windowClosing. En él solo vamos a realizar un exit del sistema con System.exit.

  1. public void windowClosing(WindowEvent e) {
  2. System.exit(0);
  3. }

Así nuestro WindowAdapter quedaría de la siguiente forma para gestionar el cierre de una ventana con Java Swing.

  1. public CerrarVentana(){
  2. addWindowListener(new WindowAdapter() {
  3. public void windowClosing(WindowEvent e) {
  4. System.exit(0);
  5. }
  6. });
  7. }

Aunque nosotros solo hemos forzado un System.exit, en el método windowClosing podemos hacer lo que queramos. Por ejemplo, preguntar al usuario si está seguro de cerrar.

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java Swing

Formulario básico con Java Swing Junio 3, 2010

Publicado por lineadecodigo en : Java , 2 comentarios

En este ejemplo vamos a crear un formulario básico con Java Swing. En este formulario introduciremos una etiqueta, un campo de texto y un botón.

Lo primero que vamos a hacer es extender nuestra clase de JFrame, para poder tener una ventana que represente a nuestra aplicación.

  1. public class FormularioBasicoSwing extends JFrame {...}

En el constructor de la clase será donde crearemos el formulario básico utilizando los elementos de Java Swing. Pero antes de instanciar los elementos del formulario vamos a llamar al constructor de JFrame mediante el método super().

  1. public FormularioBasicoSwing() {
  2. super("Formulario Basico");
  3. }

Antes de añadir los elementos al formulario vamos a dar un layout al contenedor. El layout es la forma en la que se van a posicionar los elementos en el contenedor. En este caso vamos a utilizar un FlowLayout. El FlowLayout posiciona los elementos de izquierda a derecha y de arriba a abajo.

El método .setLayout() nos ayudará a asociar el FlowLayout a nuestro contenedor.

  1. getContentPane().setLayout(new FlowLayout());

Los elementos del formulario a utilizar serán:

La creación de estos elementos es muy sencilla.

  1. JLabel label = new JLabel("Introduce tu nombre:");
  2. JTextField textfield = new JTextField("nombre",20);
  3. JButton boton = new JButton("Enviar");

Una vez creados hay que añadirlos al contenedor mediante el método .add()

  1. getContentPane().add(label);
  2. getContentPane().add(textfield);
  3. getContentPane().add(boton);

Ya solo nos quedará definir el tamaño de la ventana y hacerla visible. Es decir, invocar a los métodos .setSize() y .setVisible()

  1. setSize(400,300);
  2. setVisible(true);

Y ya tenemos construido nuestro formulario básico con Java Swing.

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java Swing

Hola Mundo con Swing Junio 1, 2010

Publicado por lineadecodigo en : Java , 6 comentarios

Mediante este artículo intentamos hacer una incursión al mundo de la programación gráfica con Swing. De esta forma veremos como abrir una nueva ventana que nos muestre el texto "Hola Mundo" en su interior.

Lo primero que tenemos que saber es que la clase que representa la ventana (o frame) es JFrame. Y que nuestra clase concreta heredará todo de dicha clase.

  1. public class HolaMundoSwing extends JFrame {...}

De esta forma conseguimos que nuestra clase HolaMundoSwing ya represente una ventana.

Lo siguiente será empezar con la codificación del constructor de la clase. En dicho constructor definiremos la etiqueta de texto, la añadiremos al contenedor y haremos que el contenedor sea visible.

  1. public HolaMundoSwing() {...}

En el constructor invocaremos al constructor del padre. Para ello nos ayudamos del método super. Como el constructor de JFrame, al menos uno de ellos, espera el título de la ventana como parámetro, ejecutaremos el método super() de la siguiente forma:

  1. super("Hola Mundo");

Ahora pasaremos a crear la etiqueta. Las etiquetas en Java Swing las podemos utilizar mediante la clase JLabel. El constructor de la clase JLabel espera el texto de la etiqueta como parámetro. En este caso, al ser "Hola Mundo" realizaremos la creación de la etiqueta de la siguiente forma:

  1. JLabel label = new JLabel("Hola Mundo");

Una vez creada la etiqueta la añadimos a la ventana mediante el método .add() del contenedor

  1. JLabel label = new JLabel("Hola Mundo");
  2. getContentPane().add(label);

Ya solo nos quedará darle un tamaño a la ventana y hacerla visible. Esto lo hacemos mediante los métodos setVisble() y setSize().

  1. setSize(200,100);
  2. setVisible(true);
  3. }

El código completo del constructor sería el siguiente:

  1. public HolaMundoSwing() {
  2. super("Hola Mundo");
  3.  
  4. JLabel label = new JLabel("Hola Mundo");
  5. getContentPane().add(label);
  6.  
  7. setSize(200,100);
  8. setVisible(true);
  9. }

Ya solo nos quedará invocar a la clase HolaMundoSwing. Para ello creamos un método main y la instanciamos.

  1. public static void main(String[] args) {
  2. new HolaMundoSwing();
  3. }
|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java Swing

Reemplazar contenido con Java Mayo 31, 2010

Publicado por lineadecodigo en : Java , Hasta ahora 1 comentario

En el tratamiento de textos, una operación muy utilizada es la de buscar contenido y reemplazarlo por un nuevo contenido. Es la típica opción de los editores de texto de "Buscar y Reemplazar...".

Ahora vamos a ver como podemos hacer esto mediante Java de una forma sencilla. Lo primero será tener una cadena:

  1. String s = "La pausa la realizó Fernando. En las representaciones de teatro, Fernando era el que mejor llevaba el tempo";

Para poder reemplazar contenido con Java nos tenemos que apoyar en el método .replaceAll(). Este método recibirá como parámetros el contenido a reemplazar y el nuevo contenido. El resultado de ejecutar el método será una nueva cadena.

  1. s = s.replaceAll("Fernando", "Victor");

Vemos que .replaceAll() es un método extremadamente potente y que nos ayudará con muchas operaciones de mantenimiento de textos.

|- Descargar el código
|- Reportar error en el código
|- Foro sobre Java