Ejemplo de Archivos en Java

Hoy le he ayudado a un amigo con su proyecto de Archivos en Java donde tenia que hacer un programa para el registro de películas, clientes y todo lo que se necesita para ir a rentar una película, saber que películas hay y quienes la rentaron.

Me paso lo que tenia hecho y la neta no le entendí mucho que digamos, para empezar tenia el registro de DVDS, Blu-Rays y Clientes en la misma pantalla lo que hacia que tuviera como 50 botones en una sola pantalla, no manches le dije, aparte tenia un Altas,bajas y listar para los 3 cuando podía juntar las dos primeras en uno solo. En fin, le dije que mejor le hacia la parte del registro de películas y dvds y ya que el validara e hiciera todo lo demás.
Y bueno, por si alguien esta aprendiendo a programar les dejo el código fuente de lo que hice al  final.

Este programa contiene lo siguiente:

  • Altas de Archivos(crear)
  • Bajas de Archivos
  • Leer Archivos
  • Listar Archivos
  • Renombrar Archivos
  • Borrar Archivos.

Y así se ve la pantalla de las altas de películas en DVD o Blu-ray.
archivos

Bien, como lo prometido es deuda, después de instalar el plugin Wp-Syntax a mi blog, ahora si puedo poner código y que se vea bien chukis con colores y toda la onda ^^.

Empezamos, quiero suponer que si están viendo archivos es porque seguramente ya aprendieron a usar métodos y métodos con parámetros etc..¿No?. Bueno, por si no saben o nunca los han usado les explicare una parte con la que se toparan en cada evento de los botones.

En esta parte lo que hago es obtener el tipo que se selecciono del combo box para saber que se va dar de alta DVD(0) y Bluray(1). Los valores que recibo son posiciones del los datos del combo box, como cuando usamos vectores ya saben, empezando desde el 0.

switch(tipo.getSelectedIndex())
{
    case 0:altas(ruta="c:/archivoDVD.txt" ,presentacion="DVD");
          break;
    case 1: altas(ruta="c:/archivoBlueray.txt" ,presentacion="Blueray");
           break;
    default: JOptionPane.showMessageDialog(null,"No selecciono ninguna opción");
    break;
}

Una ves que se selecciona el tipo de formato de la película entra al case y mando llamar al método altas donde le envió la ruta del archivo que va crear y el formato o presentación de la película. Si se dan cuenta a como esta el programa nunca entraran al case default, pero esta así porque falta la presentación VHS y no se que otra mas se necesitaba, de todas formas se harían prácticamente igual.

Ahora vemos el método altas donde recibimos 2 parámetros, la ruta donde se creara el archivo dependiendo del tipo de presentación de la película y el de presentación es solo para mostrar en un mensajito que se dio de alta un blu-ray o un DVD que igual se necesita.

    public void altas(String ruta , String presentacion){
    try{
      PrintWriter datos = new PrintWriter(new FileWriter(ruta, true));
      //escritura archivo
      String mensaje= codigo.getText() + "_" +
                      titulo.getText() +"_"+
                      director.getText() +"_"+
                      actor1.getText() +"_"+
                      actor2.getText() +"_"+
                      lenguaje.getText() + "_"+
                      subtitulos.getSelectedIndex()+"\n";
      JOptionPane.showMessageDialog(null,"Se dio de alta el "+presentacion+" con el código: "+codigo.getText()+"\n y el titulo: "+titulo.getText());
      datos.write(mensaje);
      datos.close();
	} catch(NumberFormatException nfe){
    } catch(IOException ioe){ }
  /*ALTASsssssssss*/
    }

Lo siguiente es crear un archivo con PrintWriter en la ruta que le enviamos, después creamos una variable String llamada mensaje donde se guardaran todos los datos de la pelicula mediante un getText() a cada Textfield con información de la película y los voy separando con un guion bajo (_) para saber que es un campo distinto y al final una diagonal \n para separar 1 película de otra.
Una ves que se obtengan todos los registros y este llena la variable mensaje con todos los datos, procedemos a escribir en el archivo datos, para esto usamos write y le enviamos por parámetro la variable mensaje que contiene el registro de la película que estamos dando de alta así:

90210_nombre_director_actor1_actor2_lenguaje_subtitulos\n

Y los guardamos con
datos.write(mensaje);
Y cerramos el archivo datos con un close una ves que dejemos de dar de alta datos.close();

Ahora, los siguientes 2 métodos los explicare antes del método bajas de registros porque se necesitaran dentro de el.
El primero se llama borrar_archivo y recibe como parámetro la ruta del archivo que se va borrar, creamos una variable del tipo File para indicarle que se trata de un archivo y este recibirá la ruta que obtenemos como parámetro, si lo encuentra se borra el archivo con delete() y si no, pues no 😛 y muestra un mensaje.

   public void borrar_archivo(String ruta){
      File arc = new File(ruta);
      if (arc.delete())
      System.out.println("Archivo Borrado");
      else
      System.out.println("No se pudo borrar");
   }

El siguiente método lo hice porque a la hora de utilizar el método bajas creo un archivo temporal en donde mando todos los datos del archivo y luego lo renombro para eliminar el tempo.txt y se quede con el nombre original con los datos correctos.

   public void renombrar_archivo(String ruta){
      File nuevonombre = new File(ruta);
      File viejonombre = new File("c:/tempo.txt");
      if (viejonombre.renameTo(nuevonombre)){
      System.out.println("No se pudo renombrar");
      }

Método baja, este método al igual que todos recibe como parámetro la ruta del archivo con el que vamos a trabajar, lo siguiente es crear una variable para saber cual es el registro que se va eliminar por su numero de código.
Para esto abrimos el archivo en modo lectura y leemos linea por linea mientras que las lineas no estén vacías, como el primer campo de nuestros registros es el codigo de la pelicula, creamos un StringTokenizer y le decimos que cuando se encuentre un guion bajo corte porque lo que sigue despues de ese guion es otro campo que no nos interesa, así que solo tomara la primera parte porque como les dije arriba, a la hora de guardar todos nuestros registros están así.
90210_nombre_director_actor1_actor2_lenguaje_subtitulos\n
Lo siguiente es comparar el codigo con el que vamos a eliminar con equals, que se usa para comparar si son iguales o no,si es igual mandamos un mensaje diciendo que se elimino el registro, pero si no son iguales guardamos toda la linea en un archivo temporal.

    public void baja(String ruta){
          String eliminar = JOptionPane.showInputDialog("Introduce el código de la película que deseas eliminar");
       try {
				BufferedReader mensaje = new BufferedReader(new FileReader(ruta));
				String linea = mensaje.readLine();
				while(linea != null)
                {
					StringTokenizer token = new StringTokenizer(linea,"_");
					String codigo = token.nextToken();
                    if(codigo.equals(eliminar)){
                    JOptionPane.showMessageDialog(null,"Se elimino el código: "+codigo);
                     }
                    else
                    {
                    String lineatempo=linea+"\n";
                    PrintWriter mensajeTemp = new PrintWriter(new FileWriter("c:/tempo.txt", true));
                    mensajeTemp.write(lineatempo);
                    mensajeTemp.close();
                    }
					linea = mensaje.readLine();
				}
                mensaje.close();
 
       borrar_archivo(ruta);
       renombrar_archivo(ruta);
 
		} catch(NumberFormatException nfe){
		}catch(IOException ioe){
		}
    }

Ya que guardamos todos los registros en el archivo temporal borramos el archivo original, por ejemplo: c:/archivoDVD.txt llamando al método borrar archivo. Y como los datos que nos importan los guardamos en el archivo temporal sin guardar el que eliminamos, lo renombramos con el método renombrar_archivo y le ponemos c:/archivoDVD.txt.

Y bueno, falta el método listar pero ese se los dejo de tarea xD, de todas formas viene dentro del código fuente que les dejare aquí abajo.

Descargar Código fuente y Archivo ejecutable en JAR para que vean como funciona ^^

Tal ves esta no fue la mejor forma de explicar el código que resulto en un post muy largo, así que cualquier duda en los comentarios.

Ojo!, le faltan muchísimas validaciones para que funcione 100%, pero esas les tocan a ustedes, el programa solo hace lo que tiene que hacer.

48 Comentarios

  1. gairokux 12 junio 2009
  2. danielmd 12 junio 2009
    • AlejoNait 4 junio 2010
      • AlejoNait 4 junio 2010
        • danielmd 4 junio 2010
      • danielmd 4 junio 2010
  3. Matias 17 julio 2009
  4. danielmd 17 julio 2009
  5. Matias 18 julio 2009
  6. danielmd 18 julio 2009
  7. danielmd 18 julio 2009
  8. Matias 19 julio 2009
  9. danielmd 19 julio 2009
  10. jimmy 21 septiembre 2009
  11. danielmd 22 septiembre 2009
  12. rata 12 noviembre 2009
  13. danielmd 12 noviembre 2009
  14. kurtjavier 10 enero 2010
  15. eduardo 24 mayo 2010
  16. glenda 15 octubre 2010
    • danielmd 15 octubre 2010
      • glenda 16 octubre 2010
        • glenda 16 octubre 2010
          • danielmd 17 octubre 2010
        • danielmd 17 octubre 2010
  17. alex 15 octubre 2010
    • danielmd 15 octubre 2010
      • Osuna 16 octubre 2010
        • danielmd 16 octubre 2010
          • glenda 17 octubre 2010
  18. Osuna 18 octubre 2010
  19. dan 24 noviembre 2010
  20. rocio mares 25 noviembre 2010
    • danielmd 26 noviembre 2010
  21. Ludwick 11 febrero 2011
    • danielmd 12 febrero 2011
  22. Maria 10 febrero 2012
  23. hugo 16 febrero 2012
  24. sebastian 4 junio 2012
  25. sebastian 4 junio 2012
  26. cesar 2 diciembre 2012
  27. Gerardo 2 diciembre 2012
  28. Danny 21 marzo 2013
  29. Jhon 18 abril 2013
    • danielmd 19 abril 2013

Deja un comentario