elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: [1]
1  Programación / Ejercicios / Ejercicio resuelto. Gracias por la ayuda. en: 21 Marzo 2014, 20:58 pm
Recientemente pedí ayuda en el lugar equivocado de este foro.

Gracias a la ayuda y los buenos consejos recibidos no solo he aprendido un montón si no que además me han puesto una buena nota :)

Inicialmente empecé trabajando con un fichero de texto plano, pero me pareció un sistema muy farragoso y opté por trabajar con objetos directamente.
Pego el enlace al post original y los códigos del programa por si a alguien le valen de algo.

Muchas gracias.

http://foro.elhacker.net/java/ayuda_con_un_ejercicio_grabar_datos_en_un_fichero_secuencial_de_texto-t410283.0.html

Clase Principal:
Código:
public class Tarea6_3 implements java.io.Serializable { 
    //Se implementa la interfaz serializable para que el objeto Cliente pueda
    //escribir todos sus datos en fichero.

    /**
     * @param args the command line arguments
     * @throws java.lang.Exception
     */
    public static void main(String[] args) throws Exception {

        /**
         * Menú
         * Presenta el menú de operaciones con todas las opciones disponibles
         */
        int opcion = 0;
        do{
            try{
                opcion = Integer.parseInt(Menu()); // Mostramos el menu
                }
            catch (NumberFormatException nfe){
                System.out.println(nfe.getMessage());
                opcion = 10;
            }
        switch (opcion){
        case 0://Salir del menú
        break;
           
        case 1: //Añadir cliente
            //Creamos un nuevo objeto cliente de la clase Clientes
            Clientes cliente = new  Clientes(Clientes.setNombre(),
                                    Clientes.setNif(),
                                    Clientes.setTlf(),
                                    Clientes.setDireccion(),
                                    Clientes.setDeuda());
            //Llamada al método guardarEnArchivo.
            Archivo.guardarClienteEnArchivo("clientes.dat", cliente);
        break;
                       
        case 2: //Listar clientes
            Archivo.listarClientes();
        break;

        case 3: //Buscar clientes.
            Archivo.buscarCliente();
        break;
           
           
        case 4://Borrar cliente
            Archivo.borrarCliente();
        break;

        case 5://Borrar fichero de clientes. Ojo que no hay vuelta atrás.
            Archivo.borrarClientesDat();
        break;

        default:
        System.out.println("Introduzca un valor entre 0 y 6");
        }
    }while (opcion !=0);
  }

    /**
     * menu()
     * Menú de selección. Presenta el menú de opciones
     * @return opcion
     */
    public static String Menu() {
        System.out.println("Men\u00fa");
        System.out.println("-------------------------------");
        System.out.println("1 - A\u00f1adir cliente");
        System.out.println("2 - Listar clientes");
        System.out.println("3 - Buscar cliente");
        System.out.println("4 - Borrar cliente");
        System.out.println("5 - Borrar fichero clientes.dat");
        System.out.println("0 - Salir");
        System.out.println("-------------------------------");
        String opcion = Archivo.sc.next();
        return opcion;
    }
}


Clase Archivo.
Código:
package tarea6_3;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Recoge todos los métodos necesarios para manipular el archivo clientes.dat
 * @author adec29
 */
public class Archivo implements java.io.Serializable {
    //Inicializo los miembros de clase.
    private static FileOutputStream fos;
    private static ObjectOutputStream salida;
    private static FileInputStream fis;
    private static ObjectInputStream entrada;
    final static String temporal = "temporal.dat";
    final static String archivo = "clientes.dat";
    static Scanner sc=new Scanner(System.in); //Para leer de teclado
    static boolean check;// para hacer comprobaciones
   
    /**
     * Comprueba si clientes.dat tiene registros
     * @return check
     */
    private static boolean tieneRegistros(){
        //Inicialmente presuponemos que no tenemos registros en clientes.dat
        check = false ;
        Clientes cliente = null ;

        try {
            //Abrimos el archivo para lectur.
            fis = new FileInputStream(archivo);
            entrada = new ObjectInputStream(fis);
            // Lee el primer objeto del fichero
            cliente = (Clientes) entrada.readObject();
            //Hacemos la comprobación.
            if (cliente != null){ //Si el objeto cliente tiene algo.
                check = true ;    //tieneRegistros() devuelve true
            }

        } catch (FileNotFoundException  e) {
            System.out.println( "Fichero no encontrado en tieneRegistros()"+e ) ;
        } catch (IOException | ClassNotFoundException ex) {
            System.out.println( "Capturada excepción en tieneRegistros()"+ex ) ;
        }

        return(check) ;
    }   
   
    /**
     * Lee los clientes de clientes.dat
     * @throws java.io.IOException
     */
    public static void listarClientes () throws IOException {
        //Preparamos un objeto de la clase Cliente para poder mostrar su
        //contenido cuando leamos.
        Clientes cliente = null;
       
        try {
            //Como vamos a listar solamente, no vamos a modificar nada, abrimos
            //clientes.dat en modo lectura.
            fis = new FileInputStream(archivo);
            entrada = new ObjectInputStream(fis);
            //Comprobamos que hay algo en el flujo de datos fis
            if (fis != null){
                do{
                //Leemos el primer objeto cliente a través del buffer "entrada"
                //que antes vinculamos al flujo de datos "fis" que lee el
                //archivo clientes.dat
                cliente = (Clientes) entrada.readObject();
                            System.out.println(
                             cliente.getNombre()+" "
                            +cliente.getNif()+" "
                            +cliente.getDireccion()+" "
                            +cliente.getTlf()+" "
                            +cliente.getDeuda());
                //Pero esto sólo lee el primer cliente, si queremos leerlos
                //todos habrá que repetir hasta llegar al último.                           
                }while (cliente != null);
            }   //Cerramos el archivo.
                fis.close();
                entrada.close();
        } catch (EOFException eof) {
            System.out.println("¡Fin del fichero!");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Archivo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
   
    /**
     * Nos posibilita la escritura de un nuevo registro en clientes.dat
     * @param archivo
     * @param cliente
     */
    public static void guardarClienteEnArchivo(String archivo,
                                                Clientes cliente) {
        try {
            //Creamos un fujo de salida hacia clientes.dat
            fos = new FileOutputStream(archivo, true);
            if (tieneRegistros() == true){
                //Si clientes.dat YA tiene registros.
                //El fujo ObjectOutputStream es el que procesa los datos de
                //salida y se ha de vincular a un objeto de la clase
                //FileOutputStream.(Serializar)
                salida = new MiObjectOutputStream (fos);
                ////////////////////////////////////////////////////////////////
                // ¿Por qué usamos MiObjectOutputStream?                      //
                // Visita esta página. Muy bien explicado.
                // http://www.chuidiang.com/java/ficheros/ObjetosFichero.php  //
                ////////////////////////////////////////////////////////////////               
            }
            else {
                //Si no tiene registros uso la clase ObjectOutputStream para
                //escribir la cabecera y el PRIMER registro
                salida = new ObjectOutputStream (fos);
            }     
            //Grabar cliente
            if (fos != null) {salida.writeObject(cliente);}
            //Cerrar archivo.
            fos.close();
            salida.close();
          //Captura de excepciones.
        } catch (IOException ex) {
            System.out.println("Excepción capturada en guardarClienteEnArchivo"
                    +ex.getMessage());
        }
    }

    /**
     * Nos permite buscar un cliente a través de su dni
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void buscarCliente() throws IOException,
                                              ClassNotFoundException {
        //Preparamos un objeto de la clase Cliente para poder mostrar su
        //contenido cuando leamos.
        Clientes cliente = null;
        //Preguntamos por el nif a buscar.
        String buscado = Clientes.setNif();
        try {
            //Como vamos a buscar solamente, no vamos a modificar nada, abrimos
            //clientes.dat en modo lectura.
            fis = new FileInputStream(archivo);
            entrada = new ObjectInputStream(fis);
            //Comprobamos que hay algo en el flujo de datos fis
            if (fis != null){
                do{
                //Leemos el primer objeto cliente a través del buffer "entrada"
                //que antes vinculamos al flujo de datos "fis" que lee el
                //archivo clientes.dat
                cliente = (Clientes) entrada.readObject();
                //Preguntamos por el cliente a buscar.
                String encontrado = cliente.getNif();
                //Comparamos buscado y encontrado
                if (buscado.equals(encontrado)){
                    System.out.println("Encontrado cliente."+
                            "\nNombre: "+cliente.getNombre()+
                            "\nNif: "+cliente.getNif()+
                            "\nDirección: "+cliente.getDireccion()+
                            "\nTlf: "+cliente.getTlf()+
                            "\nDeuda: "+cliente.getDeuda());
                }
                //Pero esto sólo lee el primer cliente, si queremos leerlos
                //todos habrá que repetir hasta llegar al último.
                }while (cliente != null);
                //Cerramos Archivo
                fis.close();
                entrada.close();
            }
        } catch (EOFException eof) {
            //No hagas nada
        } catch (ClassNotFoundException ex) {
            System.out.println(ex.getMessage());
        }
        //Informamos del fin de la búsqueda
        System.out.println("Búsqueda finalizada.");
    }

    /**
     * Borra un cliente que buscamos a través de su nif tantas veces como lo
     * encuentre dentro del fichero clientes.dat
     * Para ello creamos un fichero temporal.dat que guarda los clientes
     * que vamos leyendo excepto aquellos cuyo nif coincida con el buscaco.
     * Posteriormente renombramos clientes.dat a clientes.bak y renombramos
     * temporal.dat a clientes.dat.
     * Después borramos temporal.dat
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void borrarCliente() throws IOException,
                ClassNotFoundException {
        //Preparamos un objeto de la clase Cliente para poder comparar su
        //contenido cuando leamos.
        Clientes cliente = null;
        //Preguntamos por el nif del cliente a borrar.
        String buscado = Clientes.setNif();
        try {
            //Vamos a buscar. Abrimos clientes.dat en modo LECTURA
            fis = new FileInputStream(archivo);
            entrada = new ObjectInputStream(fis);
            //Comprobamos que hay algo en el flujo de datos fis
            if (fis != null){
                do{
                //Leemos el primer objeto cliente a través del buffer "entrada"
                //que antes vinculamos al flujo de datos "fis" que lee el
                //archivo clientes.dat
                cliente = (Clientes) entrada.readObject();
                //Preguntamos por el nif del objeto cliente leido.
                String encontrado = cliente.getNif();
                //Comparamos buscado y encontrado
                if (buscado.equals(encontrado)){
                    System.out.println("Eliminado cliente."+
                            "\nNombre: "+cliente.getNombre()+
                            "\nNif: "+cliente.getNif()+
                            "\nDirección: "+cliente.getDireccion()+
                            "\nTlf: "+cliente.getTlf()+
                            "\nDeuda: "+cliente.getDeuda());
                }else {
                    Temporal.guardarClienteEnArchivoTemporal(temporal, cliente);
                }
                //Pero esto sólo lee el primer cliente, si queremos leerlos
                //todos habrá que repetir hasta llegar al último.
                }while (cliente != null);
                //Cerramos archivo.
                fis.close();
                entrada.close();;
            }
        } catch (EOFException eof) {
            //No hagas nada
        } catch (ClassNotFoundException ex) {
            System.out.println(ex.getMessage());
        }
        //Informamos del fin de la búsqueda
        System.out.println("Búsqueda finalizada.");
        //Renombramos, copiamos y borramos.
        //Creamos tres abstracciones usando la clase File
        File clientesDat = new File ("clientes.dat");
        File clientesBak = new File ("clientes.bak");
        File temp = new File ("temporal.dat");
        try {
            //Renombramos y comprobamos.
            check = clientesDat.renameTo(clientesBak);
            if (check) {
                System.out.println("clientes.dat renombrado a clientes.bak");
            } else {
                System.out.println("El renombrado no se ha podido realizar");
            }
            //Renombramos y comprobamos.
            check = temp.renameTo(clientesDat);
            if (check) {
                System.out.println("temporal.dat renombrado a clientes.dat");
            } else {
                System.out.println("El renombrado no se ha podido realizar");
            }
            //Borramos los clientes.bak que ya no lo necesitamos.
            check = clientesBak.delete();
            if (check) {
                System.out.println("clientes.bak borrado");
            } else {
                System.out.println("El borrado no se ha podido realizar");
            }
        } catch (Exception e) {
                        System.out.println(e.getMessage());

        }
    }
   
    /**
     * Borra el archivo clientes.dat
     */
    public static void borrarClientesDat(){
        //Instanciamos clientesDat la clase File y le pasamos el nombre del
        //fichero con el que vamos a trabajar
        File clientesDat = new File ("clientes.dat");
        //Para borrar el fichero deberemos de invocar el método .delete()
        //de la clase File. En caso de que se pueda realizar el borrado del
        //fichero, dicho método devolverá true.
        //En caso contrario devolverá false.
try {
            if (clientesDat.delete())//true
            {
                System.out.println("Fichero borrado con éxito");
            } else //false
            {
                System.out.println("No se ha podido borrar el fichero");
            }
        } catch (Exception e) {
                        System.out.println(e.getMessage());
        }
    }
}

Clase Cliente:
Código:
import java.util.Scanner;

/**
 *
 * @author adec29
 */
public class Clientes implements java.io.Serializable {
   
    //Inicializo los miembros de clase.
    static Scanner teclado=new Scanner(System.in); //Para leer de teclado
    static boolean check;// Para hacer comprobaciones
    //Inicializo atributos de clase
    private String nif; //Nif del cliente
    private String nombre; //Nombre del cliente
    private String telefono; // Teléfono del cliente
    private String direccion; // Dirección del cliente
    private String deuda; //Deuda del dliente

   
    /**
     * Constructor de la clase
     * Los datos son comprobados dentro del método que los crea
     * @param nombre
     * @param nif
     * @param telefono
     * @param direccion
     * @param deuda
     * @throws Exception
     */
       
    public Clientes(String nombre, String nif, String telefono,
                          String direccion, String deuda) throws Exception {
      Archivo.check = false;
      this.nombre = nombre;
      this.nif = nif;
      this.telefono = telefono;
      this.direccion = direccion;
      this.deuda = deuda;
  }
   
// Métodos set y get
   
     /**
     * setNombre()
     * @return nombre
     * Nos permite establecer el nombre del cliente. Verifica que el nombre
     * introducido es correcto siempre y cuando la longitud del String nombre
     * se halle entre 3 y 40 caracteres.
     */
    public static String setNombre(){
        String nombre = "x";
        do{
            System.out.println("Introduce el nombre del cliente (3-40 caracteres):");
            nombre = teclado.nextLine();
            if ((nombre.length() < 3) || (nombre.length() > 40))
                System.out.println("El nombre debe tener entre 3 y 40 caracteres");
            }
        while ((nombre.length() < 3) || (nombre.length() > 40));
        return nombre;
        }
   
     /**
     * setNif()
     * @return nif
     * Nos permite establecer el nif del cliente. Voy a dar por correcto una
     * cadena de 9 caracteres
     */
    public static String setNif(){
        String nif = "x";
        do{
            System.out.println("Introduce el nif del cliente (9 caracteres):");
            nif = teclado.nextLine();
            if ((nif.length() < 9) || (nif.length() > 9))
                System.out.println("El nif debe tener 9 caracteres");
            }
        while ((nif.length() < 9) || (nif.length() > 9));
        return nif;
        }
   
    /**
     * setTlf()
     * @return tlf
     * Nos permite establecer el teléfono del cliente. Voy a dar por correcto una
     * cadena de 9 caracteres
     */
    public static String setTlf(){
        String tlf = "x";
        do{
            System.out.println("Introduce el teléfono del cliente (9 caracteres):");
            tlf = teclado.nextLine();
            if ((tlf.length() < 9) || (tlf.length() > 9))
                System.out.println("El teléfono debe tener 9 caracteres");
            }
        while ((tlf.length() < 9) || (tlf.length() > 9));
        return tlf;
        }
   
     /**
     * setDireccion()
     * @return dir
     * Nos permite establecer la dirección del cliente. Asume que la dirección
     * introducida es correcta siempre y cuando la longitud del String dir
     * se halle entre 3 y 40 caracteres.
     */
    public static String setDireccion(){
        String dir = "x";
        do{
            System.out.println("Introduce la dirección cliente (10-50 caracteres):");
            dir = teclado.nextLine();
            if ((dir.length() < 3) || (dir.length() > 40))
                System.out.println("El nombre debe tener entre 10 y 50 caracteres");
            }
        while ((dir.length() < 10) || (dir.length() > 50));
        return dir;
        }
   
    /**
     * setDeuda
     * Nos permite establecer la cantidad que debe el cliente
     * @return deuda
     */
    public static String setDeuda() {
    String deuda;
    System.out.println("Indique la cantidad adeudada por el cliente: ");
    deuda = teclado.next();
    return deuda;
       
  }
   
    /**
     * getNif
     * Nos devuelve el nif del cliente
     * @return nif
     */
    public String getNif() {
        return nif;
    }

    /**
     * getNombre
     * Nos devuelve el nombre del cliente
     * @return nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * getTlf
     * Nos devuelve el teléfono del cliente
     * @return teléfono
     */
    public String getTlf() {
        return telefono;
    }

    /**
     * getDireccion
     * Nos devuelve la dirección del cliente
     * @return direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * getDeuda
     * Nos devuelve la deuda que tiene el cliente
     * @return deuda
     */
    public String getDeuda() {
        return deuda;
    }
}

Clase temporal:

Código:
public class Temporal implements java.io.Serializable {
   
    private static FileInputStream fistemp;
    static final String temporal = "temporal.dat";
    private static ObjectInputStream entradatemp;
    private static ObjectOutputStream salidatemp;
    private static FileOutputStream fostemp;
    private static boolean tempcheck;

    /**
     * Nos posibilita la escritura de un nuevo registro en temporal.dat
     * @param temporal
     * @param cliente
     */
    public static void guardarClienteEnArchivoTemporal(String temporal,
                                                       Clientes cliente) {
        try {
            fostemp = new FileOutputStream(temporal, true);
            if (tieneRegistrosTemporal() == true) {
                salidatemp = new MiObjectOutputStream(fostemp);
            } else {
                salidatemp = new ObjectOutputStream(fostemp);
            }
              if (fostemp != null) {
                salidatemp.writeObject(cliente);
            }
            fostemp.close();
            salidatemp.close();
        } catch (IOException ex) {
            System.out.println("Excepci\u00f3n capturada en "
                    + "guardarClienteEnArchivo" + ex.getMessage());
        }
    }

     /**
     * Comprueba si temporal.dat tiene registros.
     */
    private static boolean tieneRegistrosTemporal() {
        tempcheck = false;
        Clientes cliente = null;
        try {
            fistemp = new FileInputStream(temporal);
            entradatemp = new ObjectInputStream(fistemp);
            cliente = (Clientes) entradatemp.readObject();
            if (cliente != null) {
                tempcheck = true;
            }
        } catch (FileNotFoundException e) {
            System.out.println("Fichero no encontrado en "
                    + "tieneRegistrosTemporal()" + e);
        } catch (IOException | ClassNotFoundException ex) {
            //no hagas nada
        }
        return tempcheck;
    }
}

Y por último, la solución a todos los problemas que tenía.
cito fuente:
http://www.chuidiang.com/java/ficheros/ObjetosFichero.php

y pego clase:

Código:
public class MiObjectOutputStream extends ObjectOutputStream
{
   
    public MiObjectOutputStream(OutputStream out) throws IOException
    {
        super(out);
    }

   
    protected MiObjectOutputStream() throws IOException, SecurityException
    {
        super();
    }

   
    @Override
    protected void writeStreamHeader() throws IOException
    {
    }

}
2  Programación / Java / No entiendo el porqué... en: 13 Marzo 2014, 18:42 pm
Saludos a tod@s.

Me pasa algo que no soy capaz de entender.

Código:
package javaya2.pkg1;

import java.util.Scanner;

/**
 * Hallar la superficie de un cuadrado conociendo el valor de un lado.
 * @author droigor
 */
public class Javaya21 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       
        //Declaraciones
        float lado;
        float superficie;
        Scanner sc = new Scanner(System.in);
       
        //Proceso
        System.out.println("Introduzca el lado del cuadrado:");
        lado = sc.nextFloat();
       
        //Resultado
        superficie = lado * lado;
        System.out.println("La superficie del cuadrado de lado "
                +lado+" es de "+superficie);
       
    }
   
}

Ejecuto el programa, introduzco cualquier número que no sea un entero y me pasa esto :

run:
Introduzca el lado del cuadrado:
2.0
Exception in thread "main" java.util.InputMismatchException
   at java.util.Scanner.throwFor(Scanner.java:909)
   at java.util.Scanner.next(Scanner.java:1530)
   at java.util.Scanner.nextFloat(Scanner.java:2388)
   at javaya2.pkg1.Javaya21.main(Javaya21.java:29)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

Soy un melón o le pasa algo a mi IDE?

Gracias.
3  Programación / Java / Ayuda con un ejercicio. Grabar datos en un fichero secuencial de texto. en: 10 Marzo 2014, 11:44 am
Lo primero un saludo. Soy nuevo en estos foros y nuevo también en la poo :)
De ahí el lio tremendo que tengo con un ejercicio de clase que nos han mandado.

 Pego el enunciado y comento cual es el problema.

Se trata de hacer una aplicación en Java que gestione los clientes de una empresa. Esos datos, se almacenarán en un fichero serializado, denominado clientes.dat.

Los datos que se almacenarán sobre cada cliente son:

    NIF.
    Nombre.
    Teléfono.
    Dirección.
    Deuda.

Mediante un menú se podrán realizar determinadas operaciones:

    Añadir cliente. Esta opción pedirá los datos del cliente y añadirá el registro correspondiente en el fichero.
    Listar clientes. Recorrerá el fichero mostrando los clientes almacenados en el mismo.
    Buscar clientes. Pedirá al usuario el nif del cliente a buscar, y comprobará si existe en el fichero.
    Borrar cliente. Pedirá al usuario el nif del cliente a borrar, y si existe, lo borrará del fichero.
    Borrar fichero de clientes completamente. Elimina del disco el fichero clientes.dat
    Salir de la aplicación.


Bueno, pues el problema es que tras clear la clase y el main, no me añade ninguna linea al fichero clientes.dat, con lo que me he quedado superatascado en el apartado 1 y no puedo seguir.

Pego los códigos y a ver que me podeis decir. Muchisimas gracias de antemanos.


Clase principal:

Código
  1. package tarea6;
  2.  
  3. /**
  4.  *
  5.  * @author adec29
  6.  */
  7. public class Tarea6 implements java.io.Serializable {
  8.    //Se implementa la interfaz serializable para que el objeto Cliente pueda
  9.    //escribir todos sus datos en fichero.
  10.  
  11.  
  12.    static ManejaClientes cliente;
  13.  
  14.    /**
  15.      * @param args the command line arguments
  16.      * @throws java.lang.Exception
  17.      */
  18.    public static void main(String[] args) throws Exception {
  19.       /**
  20.         * Creo un cliente por defecto. No se añade al archivo.
  21.         */
  22.        String nombred = "John Doe";
  23.        String nifd = "123456789K";
  24.        String tlfd = "924123456";
  25.        String dird = "13 rue del Percebe";
  26.        String deudad = "2500";
  27.        String ruta = "/home/droigor/Documentos/DAM/PROG - Programación/Unidad 6/Tarea/clientes.dat";
  28.  
  29.        cliente = new ManejaClientes(nombred, nifd, tlfd, dird, deudad);
  30.        /**
  31.          * Menú
  32.          * Presenta el menú de operaciones con todas las opciones disponibles
  33.          */
  34.        int opcion = 0;
  35.        do{
  36.            try{
  37.                opcion = Integer.parseInt(cliente.Menu()); // Mostramos el menu
  38.                }
  39.            catch (NumberFormatException nfe){
  40.                System.err.println("Sólo valores entre 0 y 6");
  41.                opcion = 10;
  42.            }
  43.        switch (opcion){
  44.        case 0://Salir del menú
  45.        break;
  46.  
  47.        case 1://Añadir cliente
  48.  
  49.        //Se crea un nuevo objeto (cliente) de la clase ManejaClientes
  50.        String nombre = ManejaClientes.setNombre();
  51.        String nif = ManejaClientes.setNif();
  52.        String tlf = ManejaClientes.setTlf();
  53.        String dir = ManejaClientes.setDireccion();
  54.        String deuda = ManejaClientes.setDeuda();
  55.        // Se invoca al constructor de la clase para que nos guarde un objeto c
  56.        // con los datos recién introducidos
  57.        ManejaClientes c = new ManejaClientes(nombre, nif, tlf, dir, deuda);
  58.        //Añadimos el nuevo cliente al fichero clientes.dat invocando el método EscribeFichero()
  59.        ManejaClientes.EscribeFichero(ruta, c.getNombre(), c.getNif(), c.getDireccion(), c.getTlf(), c.getDeuda());
  60.        break;
  61.  
  62.        case 2://Listar clientes
  63.        break;
  64.  
  65.        case 3://Buscar clientes
  66.        break;
  67.  
  68.        case 4://Borrar cliente
  69.        break;
  70.  
  71.        case 5://Borrar fichero de clientes. Ojo que no hay vuelta atrás.
  72.        break;
  73.  
  74.        default:
  75.        System.out.println("Introduzca un valor entre 0 y 6");
  76.      }
  77.  
  78.  
  79.        }while (opcion !=0);
  80.    }
  81. }





Y la clase con sus constructores y métodos.

Código
  1. package tarea6;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.io.PrintWriter;
  10. import java.util.Scanner;
  11.  
  12. /**
  13.  *
  14.  * @author droigor
  15.  */
  16. public class ManejaClientes implements java.io.Serializable {
  17.    //Habilitamos la entrada de datos por teclado
  18.    static Scanner teclado=new Scanner(System.in);
  19.  
  20.    //Atriutos
  21.    private String nif; //Nif del cliente
  22.    private String nombre; //Nombre del cliente
  23.    private String telefono; // Teléfono del cliente
  24.    private String direccion; // Dirección del cliente
  25.    private String deuda; //Deuda del dliente
  26.    private static boolean check;
  27.  
  28.    /**
  29.      * Constructor de la clase
  30.      * Los datos son comprobados dentro del método que los crea
  31.      * @param nombre
  32.      * @param nif
  33.      * @param telefono
  34.      * @param direccion
  35.      * @param deuda
  36.      * @throws Exception
  37.      */
  38.  
  39.    public ManejaClientes(String nombre, String nif, String telefono,
  40.                          String direccion, String deuda) throws Exception {
  41.      ManejaClientes.check = false;
  42.      this.nombre = nombre;
  43.      this.nif = nif;
  44.      this.telefono = telefono;
  45.      this.direccion = direccion;
  46.      this.deuda = deuda;
  47.  }
  48.  
  49. // Métodos set y get
  50.  
  51.     /**
  52.      * setNombre()
  53.      * @return nombre
  54.      * Nos permite establecer el nombre del cliente. Verifica que el nombre
  55.      * introducido es correcto siempre y cuando la longitud del String nombre
  56.      * se halle entre 3 y 40 caracteres.
  57.      */
  58.    public static String setNombre(){
  59.        String nombre = "x";
  60.        do{
  61.            System.out.println("Introduce el nombre del cliente (3-40 caracteres):");
  62.            nombre = teclado.nextLine();
  63.            if ((nombre.length() < 3) || (nombre.length() > 40))
  64.                System.out.println("El nombre debe tener entre 3 y 40 caracteres");
  65.            }
  66.        while ((nombre.length() < 3) || (nombre.length() > 40));
  67.        return nombre;
  68.        }
  69.  
  70.     /**
  71.      * setNif()
  72.      * @return nif
  73.      * Nos permite establecer el nif del cliente. Voy a dar por correcto una
  74.      * cadena de 9 caracteres
  75.      */
  76.    public static String setNif(){
  77.        String nif = "x";
  78.        do{
  79.            System.out.println("Introduce el nif del cliente (9 caracteres):");
  80.            nif = teclado.nextLine();
  81.            if ((nif.length() < 9) || (nif.length() > 9))
  82.                System.out.println("El nif debe tener 9 caracteres");
  83.            }
  84.        while ((nif.length() < 9) || (nif.length() > 9));
  85.        return nif;
  86.        }
  87.  
  88.    /**
  89.      * setTlf()
  90.      * @return tlf
  91.      * Nos permite establecer el teléfono del cliente. Voy a dar por correcto una
  92.      * cadena de 9 caracteres
  93.      */
  94.    public static String setTlf(){
  95.        String tlf = "x";
  96.        do{
  97.            System.out.println("Introduce el teléfono del cliente (9 caracteres):");
  98.            tlf = teclado.nextLine();
  99.            if ((tlf.length() < 9) || (tlf.length() > 9))
  100.                System.out.println("El teléfono debe tener 9 caracteres");
  101.            }
  102.        while ((tlf.length() < 9) || (tlf.length() > 9));
  103.        return tlf;
  104.        }
  105.  
  106.         /**
  107.      * setDireccion()
  108.      * @return dir
  109.      * Nos permite establecer la dirección del cliente. Asume que la dirección
  110.      * introducida es correcta siempre y cuando la longitud del String dir
  111.      * se halle entre 3 y 40 caracteres.
  112.      */
  113.    public static String setDireccion(){
  114.        String dir = "x";
  115.        do{
  116.            System.out.println("Introduce la dirección cliente (10-50 caracteres):");
  117.            dir = teclado.nextLine();
  118.            if ((dir.length() < 3) || (dir.length() > 40))
  119.                System.out.println("El nombre debe tener entre 10 y 50 caracteres");
  120.            }
  121.        while ((dir.length() < 10) || (dir.length() > 50));
  122.        return dir;
  123.        }
  124.  
  125.    /**
  126.      * setDeuda
  127.      * Nos permite establecer la cantidad que debe el cliente
  128.      * @return deuda
  129.      */
  130.    public static String setDeuda() {
  131.    String deuda;
  132.    System.out.println("Indique la cantidad adeudada por el cliente: ");
  133.    deuda = teclado.next();
  134.    return deuda;
  135.  
  136.  }
  137.  
  138.    /**
  139.      * getNif
  140.      * Nos devuelve el nif del cliente
  141.      * @return nif
  142.      */
  143.    public String getNif() {
  144.        return nif;
  145.    }
  146.  
  147.    /**
  148.      * getNombre
  149.      * Nos devuelve el nombre del cliente
  150.      * @return nombre
  151.      */
  152.    public String getNombre() {
  153.        return nombre;
  154.    }
  155.  
  156.    /**
  157.      * getTlf
  158.      * Nos devuelve el teléfono del cliente
  159.      * @return teléfono
  160.      */
  161.    public String getTlf() {
  162.        return telefono;
  163.    }
  164.  
  165.    /**
  166.      * getDireccion
  167.      * Nos devuelve la dirección del cliente
  168.      * @return direccion
  169.      */
  170.    public String getDireccion() {
  171.        return direccion;
  172.    }
  173.  
  174.    /**
  175.      * getDeuda
  176.      * Nos devuelve la deuda que tiene el cliente
  177.      * @return deuda
  178.      */
  179.    public String getDeuda() {
  180.        return deuda;
  181.    }
  182.  
  183.    /**
  184.      * menu()
  185.      * Menú de selección. Presenta el menú de opciones
  186.      * @return opcion
  187.      */
  188.    public String Menu(){
  189.    System.out.println("Menú");
  190.    System.out.println("-------------------------------");
  191.    System.out.println("1 - Añadir cliente");
  192.    System.out.println("2 - Listar clientes");
  193.    System.out.println("3 - Buscar cliente");
  194.    System.out.println("4 - Borrar cliente");
  195.    System.out.println("5 - Borrar fichero clientes.dat");
  196.    System.out.println("0 - Salir");
  197.    System.out.println("-------------------------------");
  198.    String opcion = teclado.next();
  199.    return opcion;
  200.  }
  201.  
  202.    /**
  203.      * escribeFichero()
  204.      * Nos permite escribir datos en el fichero clientes.dat
  205.      * @param ruta - La ruta del fichero
  206.      * @param nombre
  207.      * @param nif
  208.      * @param telefono
  209.      */
  210.    public static void EscribeFichero(String ruta, String nombre, String nif, String telefono,
  211.                          String direccion, String deuda){
  212.        //Inicializamos los objetos fichero y registro que usaremos más adelante
  213.        // para crear un fichero o añadirle datos  en la ruta definida en los
  214.        // atributos de la clase
  215.         FileWriter fichero;
  216.         PrintWriter registro;
  217.  
  218.         try{
  219.             //Creo un ofjeto fichero. El true detrás de ruta es para poder añadir
  220.             //contenido al fichero si existe, si no existe se crea.
  221.            fichero = new FileWriter(ruta, true);
  222.            registro = new PrintWriter(fichero);
  223.            registro.println();
  224.  
  225.             } catch (IOException e) {
  226.             System.out.println("Error de entrada/salida."+e);
  227.  
  228.             }catch (Exception ex){//Es la excepción más general y se refiere a cualquier error de entrada y salida
  229.             System.out.println("Error genérico"+ex);
  230.             }
  231.    }
  232.  
  233.    /**
  234.      * LeerFichero()
  235.      * Nos permite leer del fichero clientes.dat
  236.      * @param ruta
  237.      * @return
  238.      * @throws FileNotFoundException
  239.      */
  240.    public static String LeerFichero (String ruta) throws FileNotFoundException{
  241.        try{
  242.            File fichero;
  243.            FileReader registro;
  244.            //Creo el objeto del archivo a leer
  245.            fichero=new File(ruta);
  246.            //Creo un objeto FileReader que abrirá el flujo de datos a leer
  247.            registro=new FileReader(fichero);
  248.            //Creo un lector en buffer para recopilar los datos de registro
  249.            BufferedReader br= new BufferedReader(registro);
  250.            //Creo una variable lectura que usaré más adelante para almacenar
  251.            //la lectura del archivo y una variable de comprobación
  252.            String lectura="";
  253.            String check=" ";
  254.            //Con este while leemos el archivo linea a linea hasta que se acaba
  255.            // el fichero. Si la variable check tiene datos, se acumulan en la
  256.            //variable lectura. Si check es nula ya se ha leido todo el archivo
  257.            while (true){
  258.                check = br.readLine();
  259.                if (check != null) lectura=lectura+check+"n";
  260.                else
  261.                break;
  262.        }
  263.            br.close();
  264.            registro.close();
  265.            return lectura;
  266.        }
  267.            catch (IOException e){
  268.                    System.out.println("Error:"+e.getMessage());
  269.                    }
  270.            return null;
  271.  
  272.        }
  273.  
  274.  
  275.  
  276.    }

Bueno, pues aquí está.
Un saludo a todos.
Rodri.

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines