miércoles, junio 22, 2011

OCJP: Objetivo 3.2

OCJP: Objetivo 3.2


OCJP: Objetivo 3.2 A partir de un escenario que involucre navegación por el sistema de archivos, lectura de archivos, o escritura en archivos, desarrollar la solución correcta usando las siguientes clases (algunas veces en combinación), del paquete java.io: BufferedReader, BufferedWriter, File, FileReader, PrintWriter y Console.

A continuación publico un ejemplo tonto y simple que trata de usar las clases mencionadas en el objetivo 3.2 del Oracle Certified Programmer for Java.

Descargar Deditor.java

import java.io.Console;

import java.io.File;

import java.io.FileReader;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.FileWriter;

import java.io.BufferedWriter;



public class Deditor {

  public Deditor(){

    inicio();

  }



  public static void main(String[] args) throws Exception{

    Console c = System.console();

        

    if(c==null){

      throw new Exception("No se pudo obtener consola.");

    }  

    

    new Deditor();

  }

  

  private void inicio(){

    int op = 1;



    do{

      op = getOpcionMenu("Salir","Abrir","Nuevo","Borrar","Listar");

      

      switch(op){

        case 1: break;

        case 2: abrir(); break;

        case 3: nuevo(); break;

        case 4: borrar(); break;

        case 5: listar(new File(".")); break;

      }



    } while(op!=1);



  }

  

  private void listar(File ruta){

    File files[] = ruta.listFiles();

    

    try {

      for(File f:files){

        System.console().printf("\t%s\n",f.getCanonicalPath());

      }

    } catch(IOException e){

      e.printStackTrace();

    }

  }



  private void abrir(){

    try {



      System.console().format("Archivo a abrir \n>");



      String ruta = System.console().readLine();

      File file = new File(ruta);



      if(!file.exists()){

        System.out.println("Error! el archivo no existe.");

        return;

      }



      FileReader fr = new FileReader(file);

      BufferedReader bfr = new BufferedReader(fr);



      String linea ;



      while((linea = bfr.readLine())!=null){

        System.console().printf("%s",linea + '\n');

      }



      bfr.close();

    } catch (FileNotFoundException e){

      System.out.println("Archivo no encontrado");

     } catch(IOException e){

      System.out.println("Error IO");

    }

  }



  private void nuevo(){

    String nombreArchivo = null;



    System.out.println("Esriba el nombre del archivo: ");

    nombreArchivo = System.console().readLine();

    

    if(nombreArchivo==null || nombreArchivo.length()<1 br="">
      System.console().printf("El nombre de archivo es invalido.");

      return;

    }



    File file = new File(nombreArchivo);

    if(file.exists()){

      System.console().printf("Error el archivo ya existe!");

      return;

    }



    System.out.println("Escriba el contenido del archivo\n(finaliza con .)\n\n\n");

    

    StringBuilder contenido = new StringBuilder();

    

    String l = null;

    do{

      l = System.console().readLine();

      contenido.append(l);

      contenido.append('\n');

    } while (l!=null && !l.equals("."));



    try {

      FileWriter fw = new FileWriter(file);

      BufferedWriter bw = new BufferedWriter(fw);



      bw.write(contenido.toString());



      bw.flush();

      bw.close();

    } catch(IOException e){

     e.printStackTrace();

    }

  }



  private void borrar(){

    System.out.println("Escriba el nombre del archivo a borrar> ");



    String nombreArchivo = System.console().readLine();



    if(nombreArchivo==null || nombreArchivo.length()<1 br="">
     System.out.println("Archivo invalido");     

     return;

    }



    File file = new File(nombreArchivo);

    if(!file.exists() || file.isDirectory()){

      System.out.println("El archivo no es valido");

      return;

    }



    boolean isOk = file.delete();

    

    if(isOk){

      System.out.println("Archivo borrado");

    } else {

      System.console().printf("Problemas borrando archivo.");

    }

  }



  private int getOpcionMenu(String... opciones){

    int i = 1;



    System.out.println("Seleccione una opcion:");

    for(String o:opciones){

      System.out.println("\t" + i + " - " + o);

      i++;

    }



   System.out.print("> ");



    return readInt();

  }



  private int readInt(){

    int retorno = 0;

    String r = "";

    boolean esNumerico = false;



    while(r==null || r.length()<1 br="" esnumerico="">
      r = System.console().readLine();

      try {

        retorno = Integer.parseInt(r);

        esNumerico = true;

      } catch(NumberFormatException e){

        // no es error

      }

    } 

    

    return retorno;

  }

}