Autor Tema: programa java registrar eliminar consultar modificar FileWriter BufferedW jGRASP  (Leído 13441 veces)

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Hola, tengo el código siguiente pero al momento de ingresar mi dato dice que no se encontró, no entiendo el por qué. Pondré todas las clases que tengo lo hago mediante set y get

Código: [Seleccionar]
import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;
public class CrearFile2
{
    public CrearFile2 ()
    {}
      File archivo= new File("C:\\Prueba\\EquipoV.txt");
      FileWriter f;
      BufferedWriter bw;
      Jugadores j = new Jugadores();
      LeerMostrar5 lm5 = new LeerMostrar5 ();
      Personal p = new Personal();
      Proovedores pr = new Proovedores();
     
   public void  setCrearJugadores(){
       File archivo= new File("C:\\Prueba\\EquipoV.txt");
       FileWriter f;
       BufferedWriter bw;

     try
      {
       if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        bw.write(j.getMatricula()+"|");
        j.setNombre(lm5.getNombreJ());
        bw.write(j.getNombre()+"|");
        j.setAp(lm5.getApe());
        bw.write(j.getAp()+"|");   
        j.setAm(lm5.getAma());
        bw.write(j.getAp()+"|");   
        j.setNumeroCa(lm5.getNumC());
        bw.write(j.getNumeroCa()+"|");   
        j.setPosicion(lm5.getPosic());
        bw.write(j.getPosicion()+"|");
        j.setEstatus(lm5.getEstatus1());
        bw.write(j.getEstatus()+"|");
        j.setSexo(lm5.getSex1());
        bw.write(j.getSexo()+"|");
        }
        else{
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        bw.write(j.getMatricula()+"|");
        j.setNombre(lm5.getNombreJ());
        bw.write(j.getNombre()+"|");
        j.setAp(lm5.getApe());
        bw.write(j.getAp()+"|");   
        j.setAm(lm5.getAma());
        bw.write(j.getAp()+"|");   
        j.setNumeroCa(lm5.getNumC());
        bw.write(j.getNumeroCa()+"|");   
        j.setPosicion(lm5.getPosic());
        bw.write(j.getPosicion()+"|");
        j.setEstatus(lm5.getEstatus1());
        bw.write(j.getEstatus()+"|");
        j.setSexo(lm5.getSex1());
        bw.write(j.getSexo()+"|");
       
        }
       //f.close();
       bw.close();
     }
      catch(Exception ex)
       {JOptionPane.showMessageDialog(null,ex);}
     
    }   
     
     public void  setCrearPersonal(){
       File archivo= new File("C:\\Prueba\\EquipoV.txt");
       FileWriter f;
       BufferedWriter bw;

     try
      {
       if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
               
        p.setClave(lm5.getClave());
        bw.write(p.getClave()+"|");
        p.setNombre(lm5.getNombrep());
        bw.write(lm5.getNombrep()+"|");
        p.setAp(lm5.getAp2());         
        bw.write(lm5.getAp2()+"|");
        p.setAm(lm5.getAp2());
        bw.write(p.getAm()+"|");
        p.setPuesto(lm5.getPuesto1());
        bw.write(p.getPuesto()+"|");
        p.setEspecialidad(lm5.getEsp());
        bw.write(p.getEspecialidad()+"|");
        p.setTiempoE(lm5.getTiempoe());
        bw.write(p.getTiempoE()+"|");
        p.setSexo(lm5.getSex2());
        bw.write(p.getSexo()+"|");
       } else{
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
               
        p.setClave(lm5.getClave());
        bw.write(p.getClave()+"|");
        p.setNombre(lm5.getNombrep());
        bw.write(lm5.getNombrep()+"|");
        p.setAp(lm5.getAp2());         
        bw.write(lm5.getAp2()+"|");
        p.setAm(lm5.getAp2());
        bw.write(p.getAm()+"|");
        p.setPuesto(lm5.getPuesto1());
        bw.write(p.getPuesto()+"|");
        p.setEspecialidad(lm5.getEsp());
        bw.write(p.getEspecialidad()+"|");
        p.setTiempoE(lm5.getTiempoe());
        bw.write(p.getTiempoE()+"|");
        p.setSexo(lm5.getSex2());
        bw.write(p.getSexo()+"|");
       }
         f.close();
         bw.close();
         
      }
      catch(Exception ex)
      {ex.printStackTrace();}
     }
     
     public void  setCrearProveedores() throws IOException
   {
     try
      {
      if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();       
       
        pr.setNombre(lm5.getNombrePr());
        bw.write(pr.getNombre());
        pr.setDireccion(lm5.getDirecpr());
        bw.write(pr.getDireccion());
        pr.setCiudad(lm5.getCiudad1());         
        bw.write(pr.getCiudad());
        pr.setEmail(lm5.getEmail());
        bw.write(pr.getEmail());
        pr.setTelefono(lm5.getTelefono());
        bw.write(pr.getTelefono());
         
      }else{
     
       f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();       
       
        pr.setNombre(lm5.getNombrePr());
        bw.write(pr.getNombre());
        pr.setDireccion(lm5.getDirecpr());
        bw.write(pr.getDireccion());
        pr.setCiudad(lm5.getCiudad1());         
        bw.write(pr.getCiudad());
        pr.setEmail(lm5.getEmail());
        bw.write(pr.getEmail());
        pr.setTelefono(lm5.getTelefono());
        bw.write(pr.getTelefono());
      } 
         f.close();
         bw.close();       
   }
      catch(Exception ex)
      {ex.printStackTrace();}
     }
     
   public void  setConsulta() throws IOException
    {
      File file = new File("C:\\Prueba\\EquipoV.txt");   
      Scanner lector;
      lector = new Scanner(System.in);
      String datoAbuscar;
      //JOptionPane.showInputDialog("Dato a buscar:");
      datoAbuscar = lector.nextLine();
      lector = new Scanner(file);
         
          while (lector.hasNextLine()) {
            String datoBuscado = lector.nextLine();
         
               if (datoBuscado.startsWith(datoAbuscar)) {
                  JOptionPane.showMessageDialog(null,"Dato Buscado:\n" +datoBuscado);
                           }
                 //while(datoBuscado!=null && ("|"));   
         }
    }
     
      public void setMostrarB() throws IOException
      {
      try {
         
         Scanner lector = new Scanner(archivo);
         String datoAbuscar =  JOptionPane.showInputDialog("Dato a buscar:");
         while (lector.hasNextLine()) {
           String datoBuscado = lector.nextLine();
           
            if (datoBuscado.startsWith(datoAbuscar)) {
                  JOptionPane.showMessageDialog(null,"Dato buscado\n" + datoBuscado);
                           }
               
                 
               }
       }catch (FileNotFoundException e) {
         JOptionPane.showMessageDialog(null, "No se ha encontrado el fichero " + archivo.getAbsolutePath());
         e.printStackTrace();//Muestra por consola la "traza" del error
      }
    }
     
      public void setEliminar() {
     
      try{
         Scanner lector = new Scanner(archivo);
         JOptionPane.showInputDialog("Dame clave a eliminar");
         String nombreE=lector.nextLine();
         if(archivo.exists()){
             
             FileReader fr = new FileReader(archivo);
             BufferedReader br = new BufferedReader(fr);
             String linea;
             int numLineas = 0;
             while((linea=br.readLine()) != null){
               
               numLineas++;
             
             }
             String datos [] = new String[numLineas];
             br.close();
             fr.close();
             br = new BufferedReader(new FileReader(archivo));
             int i =0;
                 while((linea=br.readLine()) != null){
                   datos [i]= linea;
                   i++;
                 }
                 br.close();
                 fr.close();
                 FileWriter fw = new FileWriter (archivo);
                 BufferedWriter bw = new BufferedWriter(fw);
                 boolean bandera =false;
                 boolean primeraL = true;
                 for (int j=0;j < datos.length; j++){
                      String Slinea [] = datos [j].split("|");
                      if(Slinea[0].equals(nombreE)){
                      bandera=true;
                      JOptionPane.showMessageDialog(null,"Dato eliminado");
                      }else{
                        if(primeraL ==true){// si es la primera vez que escrbimos cambiala a false
                         bw.write(datos[j]);
                         primeraL = false;
                         
                         }else{
                           bw.newLine();
                           bw.write(datos [j]);
                         }
                      }   
                 }
               if(bandera==false){
                JOptionPane.showMessageDialog(null,"No se encontro el dato");
                 }
               bw.close();
               fw.close();
                if(numLineas==1 && bandera == true){ //aqui verifica si hay un dato si no se acaba de eliminar
                 archivo.delete(); //se elimina el archivo completo
               }
         }else{
         
          JOptionPane.showMessageDialog(null,"No hay datos");
         }
      }catch (Exception e){
        //JOptionPane.showMessageDialog(e);
      }
    }
 }   
   
 

   
« Última modificación: 03 de Julio 2018, 21:54 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #1 en: 06 de Junio 2018, 12:52 »
Buf...
Es dificil ayudarte. Ahí hay mucho código, algo inconexo.
No tengo claro que se supone que ha de hacer cada cosa, ni cómo se ejecuta. No hay ningún metodo main() que ponga en marcha el programa...,
no sé cómo son las clases Jugadores, LeerMostrar5, Personal o Proveedores..,
ni sé qué relación hay entre ellas, ¿Jugadores y Proveedores en un mismo ejercicio?..,
se crean objetos Scanner a partir de un fichero, pero luego se intentan usar para leer datos por consola...

Me es imposible decirte qué falla, porque literalmente falla TODO en ese código.

Sin embargo, voy a comentarte una cosa a ver si te sirve para reducir líneas de código y conseguir que el texto sea más legible y entendible.
Además es algo que te servirá para cualquier programa.

Me he dado cuenta de que lo que haces es escribir en el fichero los datos, uno por uno.
Código: [Seleccionar]
if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        bw.write(j.getMatricula()+"|");
        j.setNombre(lm5.getNombreJ());
        bw.write(j.getNombre()+"|");
        j.setAp(lm5.getApe());
        bw.write(j.getAp()+"|");   
        j.setAm(lm5.getAma());
        bw.write(j.getAp()+"|");   
        j.setNumeroCa(lm5.getNumC());
        bw.write(j.getNumeroCa()+"|");   
        j.setPosicion(lm5.getPosic());
        bw.write(j.getPosicion()+"|");
        j.setEstatus(lm5.getEstatus1());
        bw.write(j.getEstatus()+"|");
        j.setSexo(lm5.getSex1());
        bw.write(j.getSexo()+"|");
        }

Obtienes la matricula y la escribes en fichero. Obtienes el nombre y otra escritura en fichero. Obtienes el apellido, y otra escritura más.. Y así sucesivamente.
Esto no solo aumenta los riesgos de provocar un error de lectura/escritura en fichero, si no que aumenta las lineas de código en el programa y eso hace que sea confuso, poco elegante y sobre todo que provoque fatiga visual.
Un programa no solo ha de funcionar, ha de ser agradable a la vista del programador, lo más claro y escueto posible.

Hay una forma muy sencilla de reducir las escrituras en el fichero, y es escribir todos los datos de golpe.
En lugar de ir dato a dato, se puede construir un String con todos los datos y escribirlos de una sola vez en el fichero.

Y esto, lo ideal es pedirle a la clase Jugadores que se encargue de proporcionarte estre String con todos los datos.
De hecho, todas las clases, absolutamente todas las clase Java, incluidas las que creamos nosotros, heredan un método llamado .toString()
La idea es que el programador modifique este método heredado para adaptarlo a sus necesidades.
Muchas veces no lo necesitaremos. Pero en esta ocasión, nos puede ser muy útil.

Desconozco como es tu clase Jugadores, vamos a suponer que es algo parecido a la que pongo aquí abajo. Una clase sencilla, con sus atributos, getters y setters
Código: [Seleccionar]
public final class Jugadores {

private String matricula;
private String nombre;
private String apellido;
private int edad;
private int numCamiseta;
private String posicion;
private String status;
private String sexo;

//Setters y Getters
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public int getNumCamiseta() {
return numCamiseta;
}
public void setNumCamiseta(int numCamiseta) {
this.numCamiseta = numCamiseta;
}
public String getPosicion() {
return posicion;
}
public void setPosicion(String posicion) {
this.posicion = posicion;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
//Fin de setters y getters

@Override
public String toString()
{
String jugador = matricula + "|" + nombre + "|" + apellido + "|" + edad + "|"
+ numCamiseta + "|" + posicion + "|" + status + "|" + sexo;

return jugador;
}


}

Lo interesante está justo al final:
Código: [Seleccionar]
@Override
public String toString()
{
String jugador = matricula + "|" + nombre + "|" + apellido + "|" + edad + "|"
+ numCamiseta + "|" + posicion + "|" + status + "|" + sexo;

return jugador;
}

Este método lo que hace es coger todos los atributos, contruye un único String con todos ellos, separándolos con un símbolo (se puede usar otro símbolo, o un espacio en blanco, o lo que nos de la gana..), y lo retorna.
La etiqueta @Override es para indicarle al compilador que nuestra intención es sobreescribir (override) un método heredado.
No es obligatorio ponerla. Pero si la ponemos el compilador comprobará si estamos haciendo correctamente "el override" al método y nos avisaría en el caso de que nos equivocasemos.
Así que mejor ponerla siempre.

Gracias a todo esto, podemos usarlo para luego escribir todos esos datos en un fichero en un solo acceso.

Antes, lo hacíamos así. Lo cuál supone al menos 8 escrituras en el fichero
Código: [Seleccionar]
if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        bw.write(j.getMatricula()+"|");
        j.setNombre(lm5.getNombreJ());
        bw.write(j.getNombre()+"|");
        j.setApellido(lm5.getApe());
        bw.write(j.getAp()+"|");   
        j.setEdad(lm5.getEdad());
        bw.write(j.getAp()+"|");   
        j.setNumCamiseta(lm5.getNumC());   
        bw.write(j.getNumeroCa()+"|");   
        j.setPosicion(lm5.getPosic());
        bw.write(j.getPosicion()+"|");
        j.setEstatus(lm5.getEstatus1());
        bw.write(j.getEstatus()+"|");
        j.setSexo(lm5.getSex1());
        bw.write(j.getSexo()+"|");
        }


Ahora podemos hacerlo así, con una única escritura y además consiguiendo reducir las lineas de código.
Código: [Seleccionar]
if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        j.setNombre(lm5.getNombreJ());
        j.setApellido(lm5.getApe());
        j.setEdad(lm5.getEdad());   
        j.setNumCamiseta(lm5.getNumC());   
        j.setPosicion(lm5.getPosic());
        j.setEstatus(lm5.getEstatus1());
        j.setSexo(lm5.getSex1());
        bw.write(j.toString());//Grabamos todos los datos con tan solo una escritura
        }

Esto puede aplicarse a todas las clases. Y puedes construir el String como te de la gana, puedes escoger los atributos a incluir, añadir más texto, etc...


Ahora mismo no sé como ayudarte más. Con ese código que has puesto no soy capaz de ver cuál es el objetivo del programa.
Quizás si nos indicas el enunciado original del ejercicio y/o cuáles son las clases necesarias, podamos ayudarte a mejorar ese código o proponer una forma distinta de estructurarlo para que sea más fácil llevarlo a cabo.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #2 en: 06 de Junio 2018, 13:23 »
tengo la clase personas donde va a heredrarle algunos datos a mis demas clases

Código: [Seleccionar]
public class Personas
{
   private String nombre;
   private String ap;
   private String am;
   private Object sexo;
   
 
   public Personas()
   {
      nombre = null;
      ap = null;
      am= null;
      sexo = 0;
     
   }
     
  public void setNombre (String  nombre)
   {
      this.nombre=nombre;
   }
   public String getNombre()
   {
      return nombre;
   }
   
   public void setAp (String ap)
   {
      this.ap=ap;
   }
   public String getAp()
   {
      return ap;
   }
   public void setAm (String Am)
   {
      this.am=am;
   }
   public String getAm()
   {
      return am;
   }
   public void setSexo (Object sexo)
   {
      this.sexo=sexo;
   }
   public Object getSexo()
   {
      return sexo;
   }

}

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #3 en: 06 de Junio 2018, 13:24 »
Código: [Seleccionar]
public class Jugadores extends Personas
{
   private int matricula;
   private String posicion ;
   private int numeroca;
   private String estatus;
   
   public Jugadores()
   {
       matricula = 0;
       posicion = null ;
       numeroca = 0;
       estatus = null;
   }
   
   public void setMatricula(int matricula)
   {
      this.matricula = matricula;
   }
   public int getMatricula()
   {
      return matricula;
   }
   
   public void setPosicion(String posicion)
   {
      this.posicion = posicion;
   }
   public String getPosicion()
   {
      return posicion;
   }
   
   public void setNumeroCa(int numeroca)
   {
      this.numeroca = numeroca;
   }
   public int getNumeroCa()
   {
      return numeroca;
   }
   
   public void setEstatus(String estatus)
   {
      this.estatus = estatus;
   }
   public String getEstatus()
   {
      return estatus;
   }



   
}

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #4 en: 06 de Junio 2018, 13:24 »
Código: [Seleccionar]
public class Personal extends Personas
{
   private int clave;
   private String puesto;
   private String especialidad;
   private int tiempoe;
   
   public Personal()
   {
     clave = 0;
     puesto = null;
     especialidad = null;
     tiempoe = 0;
   }
   
   public void setClave(int clave)
    {
      this.clave = clave;
    }
   public int getClave ()
    {
      return clave;
    }

   public void setPuesto(String puesto)
    {
      this.puesto = puesto;
    }
   public String getPuesto ()
   {
      return puesto;
   }
   
    public void setEspecialidad(String especialidad)
   {
      this.especialidad = especialidad;
   }
   public String getEspecialidad()
   {
      return especialidad;
   }
   
   public void setTiempoE(int tiempoe)
    {
      this.tiempoe = tiempoe;
    }
   public int getTiempoE()
    {
      return tiempoe;
    }


}

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #5 en: 06 de Junio 2018, 13:25 »
Código: [Seleccionar]
public class Proovedores extends Personas
{
   private String direccion;
   private String ciudad;
   private String email;
   private int telefono;
   
   public Proovedores()
   {
      direccion = null;
      ciudad = null;
      email = null;
      telefono = 0;
     
   }
   
   public void setDireccion(String direccion)
    {
      this.direccion = direccion;
    }
   public String getDireccion ()
    {
      return direccion;
    }
    public void setCiudad(String ciudad)
    {
      this.ciudad = ciudad;
    }
   public String getCiudad ()
    {
      return ciudad;
    }
    public void setEmail(String email)
    {
      this.email = email;
    }
   public String getEmail ()
    {
      return email;
    }
    public void setTelefono(int telefono)
    {
      this.telefono = telefono;
    }
   public int getTelefono ()
    {
      return telefono;
    }
   
}

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #6 en: 06 de Junio 2018, 13:26 »
Código: [Seleccionar]
import java.io.*;
import javax.swing.*;
import java.util.ArrayList;
public class LeerMostrar5
{
   
   
   Jugadores j = new Jugadores();
   Personal p = new Personal();
   Proovedores pr = new Proovedores();
 
  public LeerMostrar5 ()
   {}
   
   public int getMatricula2() throws IOException
   {
      boolean bandera = false;
      do
       {
         try
           {
            j.setMatricula(Integer.parseInt(JOptionPane.showInputDialog("Matricula del jugador:")));
              bandera=true;
               }
          catch(NumberFormatException e)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
        }while(bandera!=true);
        JOptionPane.showMessageDialog(null,"Matricula\n"+j.getMatricula());
        return j.getMatricula();
    }
         
     public String getNombreJ() throws IOException
     {
     boolean bandera = false;
      do
         {
          try
             {
               j.setNombre(JOptionPane.showInputDialog("Nombre:\r\n"));
               bandera = true;
               }
          catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
         JOptionPane.showMessageDialog(null,"Nombre\n"+j.getNombre());
       return j.getNombre();
     }
     
     public String getApe() throws IOException
      {
       boolean bandera = false;
     
       do
        {
          try
            {
               j.setAp(JOptionPane.showInputDialog("Apellido paterno:"));
               bandera = true;
              }
           catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while (bandera!=true);
         JOptionPane.showMessageDialog(null,"Apellido Paterno\n"+j.getAp());
        return j.getAp();
     }
         
      public String getAma() throws IOException
       {
       boolean bandera = false;   
        do
         {
           try
           {
               j.setAm(JOptionPane.showInputDialog("Apellido materno:"));
               bandera=true;
             }
             catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
         JOptionPane.showMessageDialog(null,"Apellido Materno\n"+j.getAm());
         return j.getAm();
      }
     
      public int getNumC() throws IOException
       {
       boolean bandera=false;           
       do
        {
          try
          {
               j.setNumeroCa(Integer.parseInt(JOptionPane.showInputDialog("Numero de camisa:\r\n"+"")));
               bandera=true;
               }
           catch(Exception e)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
         JOptionPane.showMessageDialog(null,"Numero de Camisa\n"+j.getNumeroCa());
         return j.getNumeroCa();
       }
     
      public String getPosic() throws IOException
      {
      boolean bandera = false;
        do
         {
         try
            {
              j.setPosicion(JOptionPane.showInputDialog("Posicion:\r\n"));
              bandera=true;
             }
          catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
         JOptionPane.showMessageDialog(null,"Numero de Camisa\n"+j.getPosicion());
        return j.getPosicion();
       }
       
   public String getEstatus1() throws IOException
    {
     boolean  bandera = false; 
       do
         {
          try
           {
             j.setEstatus(JOptionPane.showInputDialog("Estatus:"));
              bandera=true;
            }
         catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"Error ingreso un dato no valido");}
      }while(bandera!=true);
      JOptionPane.showMessageDialog(null,"Numero de Camisa\n"+j.getEstatus());
     return j.getEstatus();
   }
   
   public Object getSex1 () throws IOException
   {
   
      j.setSexo(JOptionPane.showInputDialog(null,"Seleccione sexo","Sexo",
            JOptionPane.QUESTION_MESSAGE,null, new Object[]
                        { "Masculino", "Femenino"},"Masculino"));
                  JOptionPane.showMessageDialog(null,"Numero de Camisa\n"+j.getSexo());
                        return j.getSexo();
   }
   
   
   /*Ingresar datos de personal*/
   
   public int getClave() throws IOException
   {
      boolean bandera = false;
      do
       {
         try
           {
              p.setClave(Integer.parseInt(JOptionPane.showInputDialog("Clave:\t")));
              bandera=true;
               }
          catch(NumberFormatException e)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
        }while(bandera!=true);
        return p.getClave();
      }
         
     public String getNombrep() throws IOException
     {
     boolean bandera = false;
      do
         {
          try
             {
               p.setNombre(JOptionPane.showInputDialog("Nombre:\t"));
               bandera = true;
               }
          catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
       return p.getNombre();
     }
     
     public String getAp2() throws IOException
      {
       boolean bandera = false;
     
       do
        {
          try
            {
               p.setAp(JOptionPane.showInputDialog("Apellido paterno:"));
               bandera = true;
              }
           catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while (bandera!=true);
        return p.getAp();
     }
         
      public String getAm2() throws IOException
       {
       boolean bandera = false;   
        do
         {
           try
           {
               p.setAm(JOptionPane.showInputDialog("Apellido materno:"));
               bandera=true;
             }
             catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
         return p.getAm();
      }
     
      public String getPuesto1() throws IOException
       {
       boolean bandera=false;           
       do
        {
          try
          {
               p.setPuesto(JOptionPane.showInputDialog("Puesto:\t"));
               bandera=true;
               }
           catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
       return p.getPuesto();
       }
     
      public String getEsp() throws IOException
      {
      boolean bandera = false;
        do
         {
         try
            {
               p.setEspecialidad(JOptionPane.showInputDialog("Especialidad:\t"));
                bandera=true;
             }
          catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
        return  p.getEspecialidad();
       }
       
   public int getTiempoe() throws IOException
    {
     boolean  bandera = false; 
       do
         {
          try
           {
             p.setTiempoE(Integer.parseInt(JOptionPane.showInputDialog("Tiempo en la empresa:\t")));
             bandera=true;
            }
         catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"Error ingreso un dato no valido");}
      }while(bandera!=true);
     return p.getTiempoE();
   }
   
   public Object getSex2 () throws IOException
   {
   
      p.setSexo(JOptionPane.showInputDialog(null,"Seleccione sexo","Sexo",
            JOptionPane.QUESTION_MESSAGE,null, new Object[]
                        { "Masculino", "Femenino"},"Masculino"));
                        return p.getSexo();
   }
   
   /* Ingresar Proveedores*/
   public String getNombrePr() throws IOException
   {
      boolean bandera = false;
      do
       {
         try
           {
              pr.setNombre(JOptionPane.showInputDialog("Proveedor:\t"));
              bandera=true;
               }
          catch(NumberFormatException e)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
        }while(bandera!=true);
        return pr.getNombre();
      }
         
     public String getDirecpr() throws IOException
     {
     boolean bandera = false;
      do
         {
          try
             {
               pr.setDireccion(JOptionPane.showInputDialog("Direccion:\t"));
               bandera = true;
               }
          catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
       return pr.getDireccion();
     }
     
     public String getCiudad1() throws IOException
      {
       boolean bandera = false;
     
       do
        {
          try
            {
              pr.setCiudad(JOptionPane.showInputDialog("Ciudad:\t"));
               bandera = true;
              }
           catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto\t");}
         }while (bandera!=true);
        return pr.getCiudad();
     }
         
      public String getEmail() throws IOException
       {
       boolean bandera = false;   
        do
         {
           try
           {
               pr.setEmail(JOptionPane.showInputDialog("Email:\t"));
               bandera=true;
             }
             catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
         }while(bandera!=true);
         return pr.getEmail();
      }                 
   public int getTelefono() throws IOException
    {
     boolean  bandera = false; 
       do
         {
          try
           {
             pr.setTelefono(Integer.parseInt(JOptionPane.showInputDialog("telefono:\t")));
             bandera=true;
            }
         catch(NumberFormatException nft)
          {JOptionPane.showMessageDialog(null,"Error ingreso un dato no valido");}
      }while(bandera!=true);
     return pr.getTelefono();
   }

  }

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #7 en: 06 de Junio 2018, 13:27 »
Código: [Seleccionar]
import javax.swing.JOptionPane;
import java.io.*;
public class MenuV2
{
   MenuV2 m;
   CrearFile cf;
   BufferedReader br;
   
   public MenuV2()
   {}
   
   /*public  void  setOpcion()
   {
      JOptionPane.showInputDialog(null,"1.Agregar\n"+"2.Salir\n");
      return;
   }*/
   
   public void setMenuV2() throws IOException
    {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      CrearFile2 cf2 = new CrearFile2();
      Jugadores j = new Jugadores();
      MenuV2 m = new MenuV2();
      int opcion = 0;
      do
         {
         opcion=Integer.parseInt(JOptionPane.showInputDialog(null,"1.Registrar\n"+"2.Eliminar registro\n"+"3.Consultar\n"+"4.Salir"));
         switch (opcion)
            {
            case 1:
            int opc=0;
            do
              {
              opc=Integer.parseInt(JOptionPane.showInputDialog(null,"1.Agregar jugadores\n"+"2.Agregar Personal\n"+"3.Agregar Proveedores\n"+"4.Salir"));
              switch(opc){
              case 1:
              cf2.setCrearJugadores(); break;
              case 2:
              //cf2.setCrearPersonal(); break;
              case 3:
               //cf2.setCrearProveedores(); break;
              case 4:
              break;
              }
             }while(opc!=4);
               break;
            case 2:
            cf2.setEliminar(); break; 
            case 3:
            cf2.setMostrarB();break;         
            case 4:
            JOptionPane.showMessageDialog(null,"Salio del sistema"); break;
           
            default:
             JOptionPane.showMessageDialog(null,"Opcion inavalida");
             
             }
          }while(opcion!=4);
   }
}

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #8 en: 06 de Junio 2018, 13:28 »
el meu lo tengo asi por que el maestro lo requiere de esa forma esa son todas mis clases con las que estoy trabajando, siento que algo hace que no me perimita eliminar o mi codigo con que esta muy revuelto Gracias por la ayuda

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class MenuBueno
{
   public MenuBueno()
   {}
   
   public static void main(String args[]) throws IOException
   {
      MenuV2 m = new MenuV2();
      m.setMenuV2();
   }
}

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #9 en: 06 de Junio 2018, 13:42 »
Lo que tienes que tengo hacer es un equipo de voleibol que tengas jugadores, personal y proveedores, lo que tengo que hacer es registrar, Eliminar, consultar, modificar y que me muestre todo lo que tengo en el archivo lo que utilizó en las clases de get y set es polimorfismo y herencia de l clase que heredó es de personas para las clases de jugadores, personas y para la clases de proveedores sólo utilizó lo que es el nombre

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #10 en: 06 de Junio 2018, 14:30 »
Vale.
Voy a echarle un vistazo a ver para ponerme en situación y a ver si puedo ponerlo en marcha y ver que está fallando. Entre hoy y mañana intentaré decirte algo.

De momento, solo comentar unas cositas.

1.
En la clase Persona hay un pequeño error aquí:
Código: [Seleccionar]
public void setAm (String Am)
   {
      this.am=am;
   }

La variable del parentesis tiene la "A" mayuscula y eso hace que en el código no se esté recogiendo su valor, ya que su nombre es distinto de la variable en minuscula "am"
Hay que corregirlo así:
Código: [Seleccionar]
public void setAm (String am)
   {
      this.am=am;
   }

2.
En la clase LeerMostrar5, al pedir datos como la matricula del jugador, puesto que la matricula es un valor int pero lo recibimos como String, hacemos un parseo para cambiar el tipo de dato.
Este parseo lo hacemos dentro de un try{}catch(){} porque puede haber errores al pasar de String a int y hay que controlarlos.
OK, esto es totalmente correcto.

Pero luego, al pedir datos como Nombre o Apellido, también lo estamos poniendo dentro de un try catch
Esto es innecesario, ya que no estamos haciendo ninguna conversión de datos y no va a ocurrir ninguna excepcion que debamos controlar.
No pasa nada malo por ponerlo dentro del try catch, pero no sirve para nada, así que se pueden quitar esos try catch y reducir lineas de código.
O se pueden dejar si lo prefieres, no afectan para nada.

3.
En la clase MenuV2 aparecen objetos de una clase llamada CrearFile.
¿Puedes publicar también esa clase? Así lo tendré todo igual a como tú lo estás haciendo.

4.
Por último, una duda sobre el enunciado.
Tendremos datos de Jugadores, Personal y Proveedores.
Y se han de guardar en archivos de texto.
¿Se guardan juntos? ¿O cada uno se guardará en un archivo distinto?
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #11 en: 06 de Junio 2018, 14:59 »
Se tiene que guardar en el mismo archivo
Código: [Seleccionar]
import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;
public class CrearFile2
{
    public CrearFile2 ()
    {}
      File archivo= new File("C:\\Prueba\\EquipoV.txt");
      FileWriter f;
      BufferedWriter bw;
      Jugadores j = new Jugadores();
      LeerMostrar5 lm5 = new LeerMostrar5 ();
      Personal p = new Personal();
      Proovedores pr = new Proovedores();
     
   public void  setCrearJugadores(){
       File archivo= new File("C:\\Prueba\\EquipoV.txt");
       FileWriter f;
       BufferedWriter bw;

     try
      {
       if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        bw.write(j.getMatricula()+"|");
        j.setNombre(lm5.getNombreJ());
        bw.write(j.getNombre()+"|");
        j.setAp(lm5.getApe());
        bw.write(j.getAp()+"|");   
        j.setAm(lm5.getAma());
        bw.write(j.getAp()+"|");   
        j.setNumeroCa(lm5.getNumC());
        bw.write(j.getNumeroCa()+"|");   
        j.setPosicion(lm5.getPosic());
        bw.write(j.getPosicion()+"|");
        j.setEstatus(lm5.getEstatus1());
        bw.write(j.getEstatus()+"|");
        j.setSexo(lm5.getSex1());
        bw.write(j.getSexo()+"|");
        }
        else{
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
        j.setMatricula(lm5.getMatricula2());
        bw.write(j.getMatricula()+"|");
        j.setNombre(lm5.getNombreJ());
        bw.write(j.getNombre()+"|");
        j.setAp(lm5.getApe());
        bw.write(j.getAp()+"|");   
        j.setAm(lm5.getAma());
        bw.write(j.getAp()+"|");   
        j.setNumeroCa(lm5.getNumC());
        bw.write(j.getNumeroCa()+"|");   
        j.setPosicion(lm5.getPosic());
        bw.write(j.getPosicion()+"|");
        j.setEstatus(lm5.getEstatus1());
        bw.write(j.getEstatus()+"|");
        j.setSexo(lm5.getSex1());
        bw.write(j.getSexo()+"|");
       
        }
       //f.close();
       bw.close();
     }
      catch(Exception ex)
       {JOptionPane.showMessageDialog(null,ex);}
     
    }   
     
     public void  setCrearPersonal(){
       File archivo= new File("C:\\Prueba\\EquipoV.txt");
       FileWriter f;
       BufferedWriter bw;

     try
      {
       if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
               
        p.setClave(lm5.getClave());
        bw.write(p.getClave()+"|");
        p.setNombre(lm5.getNombrep());
        bw.write(lm5.getNombrep()+"|");
        p.setAp(lm5.getAp2());         
        bw.write(lm5.getAp2()+"|");
        p.setAm(lm5.getAp2());
        bw.write(p.getAm()+"|");
        p.setPuesto(lm5.getPuesto1());
        bw.write(p.getPuesto()+"|");
        p.setEspecialidad(lm5.getEsp());
        bw.write(p.getEspecialidad()+"|");
        p.setTiempoE(lm5.getTiempoe());
        bw.write(p.getTiempoE()+"|");
        p.setSexo(lm5.getSex2());
        bw.write(p.getSexo()+"|");
       } else{
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();
               
        p.setClave(lm5.getClave());
        bw.write(p.getClave()+"|");
        p.setNombre(lm5.getNombrep());
        bw.write(lm5.getNombrep()+"|");
        p.setAp(lm5.getAp2());         
        bw.write(lm5.getAp2()+"|");
        p.setAm(lm5.getAp2());
        bw.write(p.getAm()+"|");
        p.setPuesto(lm5.getPuesto1());
        bw.write(p.getPuesto()+"|");
        p.setEspecialidad(lm5.getEsp());
        bw.write(p.getEspecialidad()+"|");
        p.setTiempoE(lm5.getTiempoe());
        bw.write(p.getTiempoE()+"|");
        p.setSexo(lm5.getSex2());
        bw.write(p.getSexo()+"|");
       }
         f.close();
         bw.close();
         
      }
      catch(Exception ex)
      {ex.printStackTrace();}
     }
     
     public void  setCrearProveedores() throws IOException
   {
     try
      {
      if(archivo.exists()){
        f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();       
       
        pr.setNombre(lm5.getNombrePr());
        bw.write(pr.getNombre());
        pr.setDireccion(lm5.getDirecpr());
        bw.write(pr.getDireccion());
        pr.setCiudad(lm5.getCiudad1());         
        bw.write(pr.getCiudad());
        pr.setEmail(lm5.getEmail());
        bw.write(pr.getEmail());
        pr.setTelefono(lm5.getTelefono());
        bw.write(pr.getTelefono());
         
      }else{
     
       f = new FileWriter (archivo,true);
        bw = new BufferedWriter(f);
        bw.newLine();       
       
        pr.setNombre(lm5.getNombrePr());
        bw.write(pr.getNombre());
        pr.setDireccion(lm5.getDirecpr());
        bw.write(pr.getDireccion());
        pr.setCiudad(lm5.getCiudad1());         
        bw.write(pr.getCiudad());
        pr.setEmail(lm5.getEmail());
        bw.write(pr.getEmail());
        pr.setTelefono(lm5.getTelefono());
        bw.write(pr.getTelefono());
      } 
         f.close();
         bw.close();       
   }
      catch(Exception ex)
      {ex.printStackTrace();}
     }
     
   public void  setConsulta() throws IOException
    {
      File file = new File("C:\\Prueba\\EquipoV.txt");   
      Scanner lector;
      lector = new Scanner(System.in);
      String datoAbuscar;
      //JOptionPane.showInputDialog("Dato a buscar:");
      datoAbuscar = lector.nextLine();
      lector = new Scanner(file);
         
          while (lector.hasNextLine()) {
            String datoBuscado = lector.nextLine();
         
               if (datoBuscado.startsWith(datoAbuscar)) {
                  JOptionPane.showMessageDialog(null,"Dato Buscado:\n" +datoBuscado);
                           }
                 //while(datoBuscado!=null && ("|"));   
         }
    }
     
      public void setMostrarB() throws IOException
      {
      try {
         
         Scanner lector = new Scanner(archivo);
         String datoAbuscar =  JOptionPane.showInputDialog("Dato a buscar:");
         while (lector.hasNextLine()) {
           String datoBuscado = lector.nextLine();
           
            if (datoBuscado.startsWith(datoAbuscar)) {
                  JOptionPane.showMessageDialog(null,"Dato buscado\n" + datoBuscado);
                           }
               
                 
               }
       }catch (FileNotFoundException e) {
         JOptionPane.showMessageDialog(null, "No se ha encontrado el fichero " + archivo.getAbsolutePath());
         e.printStackTrace();//Muestra por consola la "traza" del error
      }
    }
     
      public void setEliminar() {
     
      try{
         Scanner lector = new Scanner(archivo);
         JOptionPane.showInputDialog("Dame clave a eliminar");
         String nombreE=lector.nextLine();
         if(archivo.exists()){
             
             FileReader fr = new FileReader(archivo);
             BufferedReader br = new BufferedReader(fr);
             String linea;
             int numLineas = 0;
             while((linea=br.readLine()) != null){
               
               numLineas++;
             
             }
             String datos [] = new String[numLineas];
             br.close();
             fr.close();
             br = new BufferedReader(new FileReader(archivo));
             int i =0;
                 while((linea=br.readLine()) != null){
                   datos [i]= linea;
                   i++;
                 }
                 br.close();
                 fr.close();
                 FileWriter fw = new FileWriter (archivo);
                 BufferedWriter bw = new BufferedWriter(fw);
                 boolean bandera =false;
                 boolean primeraL = true;
                 for (int j=0;j < datos.length; j++){
                      String Slinea [] = datos [j].split("|");
                      if(Slinea[0].equals(nombreE)){
                      bandera=true;
                      JOptionPane.showMessageDialog(null,"Dato eliminado");
                      }else{
                        if(primeraL ==true){// si es la primera vez que escrbimos cambiala a false
                         bw.write(datos[j]);
                         primeraL = false;
                         
                         }else{
                           bw.newLine();
                           bw.write(datos [j]);
                         }
                      }   
                 }
               if(bandera==false){
                JOptionPane.showMessageDialog(null,"No se encontro el dato");
                 }
               bw.close();
               fw.close();
                if(numLineas==1 && bandera == true){ //aqui verifica si hay un dato si no se acaba de eliminar
                 archivo.delete(); //se elimina el archivo completo
               }
         }else{
         
          JOptionPane.showMessageDialog(null,"No hay datos");
         }
      }catch (Exception e){
        //JOptionPane.showMessageDialog(e);
      }
    }
 }   
   
 

   

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #12 en: 06 de Junio 2018, 19:19 »
Ok. Creo que ya lo tengo.

La clase Persona no la he cambiado

Las clases Jugadores, Personal y Proveedores, el único cambio que he hecho ha sido añadirles a cada uno su propio metodo .toString(), ya que como explique antes, es muy útil y ayuda  mucho a reducir código.

Jugadores:
Código: [Seleccionar]
@Override
public String toString()
{
return matricula + "|" + super.getNombre() + "|" + super.getAp()  + "|"
+ super.getAm() + "|" + numeroca  + "|" + posicion  + "|" + estatus +
"|" + super.getSexo()  + "|";
}

Personal:
Código: [Seleccionar]
@Override
public String toString()
{
return clave + "|" + super.getNombre() + "|" + super.getAp() + "|"
+ super.getAm() + "|" +  puesto + "|" + especialidad + "|" + tiempoe
+ "|" + super.getSexo() + "|";
}

Proveedores:
Código: [Seleccionar]
@Override
public String toString()
{
return super.getNombre() + "|" + direccion + "|" + ciudad  + "|"
+ email + "|" + telefono + "|";
}

Fíjate que para obtener los atributos de la clase padre Persona, hay que usar la palabra super seguido del métod get() que necesitamos.

Sobre la clase LeerMostrar5
No he hecho cambios importantes. Tan solo eliminar lineas de código innecesarias, como por ejemplo los try catch cuando estamos pidiendo datos de tipo String.
También he quitado las declaraciones de atributos donde estaban puestos unos objetos de Personal, Jugadores y Proveedores.
Tampoco son necesarios para esta clase.

LeerMostrar5:
Código: [Seleccionar]
import javax.swing.JOptionPane;

public final class LeerMostrar5 {

public LeerMostrar5()
{}

public int getMatricula2()
{
int matricula = 0;
boolean bandera = false;
do
{
try
{
matricula = (Integer.parseInt(JOptionPane.showInputDialog("Matricula del jugador:")));
bandera=true;
}
catch(NumberFormatException e)
{JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
}while(bandera!=true);

JOptionPane.showMessageDialog(null,"Matricula\n"+matricula);
return matricula;
}

public String getNombreJ()
{
String nombre = JOptionPane.showInputDialog("Nombre:\r\n");
JOptionPane.showMessageDialog(null,"Nombre\n"+nombre);
return nombre;
}

public String getApe()
{
String apeP = JOptionPane.showInputDialog("Apellido paterno:");
JOptionPane.showMessageDialog(null,"Apellido Paterno\n"+apeP);
return apeP;
}

public String getAma()
{
String apeM = JOptionPane.showInputDialog("Apellido materno:");
JOptionPane.showMessageDialog(null,"Apellido Materno\n"+apeM);
return apeM;
}

public int getNumC()
{
boolean bandera=false;
int numCam=0;
do
{
try
{
numCam = (Integer.parseInt(JOptionPane.showInputDialog("Numero de camisa:\r\n"+"")));
bandera=true;
}
catch(Exception e)
{JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
}while(bandera!=true);
JOptionPane.showMessageDialog(null,"Numero de Camisa\n"+numCam);
return numCam;
}

public String getPosic()
{
String posicion = JOptionPane.showInputDialog("Posicion:\r\n");
JOptionPane.showMessageDialog(null,"Posicion\n"+posicion);
return posicion;
}

public String getEstatus1()
{
String status = JOptionPane.showInputDialog("Estatus:");
JOptionPane.showMessageDialog(null,"Estatus\n"+status);
return status;
}

public Object getSex1()
{
Object sexo = JOptionPane.showInputDialog(null,"Seleccione sexo","Sexo",
JOptionPane.QUESTION_MESSAGE,null, new Object[]
{ "Masculino", "Femenino"},"Masculino");

JOptionPane.showMessageDialog(null,"Sexo\n"+sexo);
return sexo;
}


/*Ingresar datos de personal*/

public int getClave()
{
boolean bandera = false;
int clave = 0;
do
{
try
{
clave = (Integer.parseInt(JOptionPane.showInputDialog("Clave:\t")));
bandera=true;
}
catch(NumberFormatException e)
{JOptionPane.showMessageDialog(null,"El dato ingresado no es correcto");}
}while(bandera!=true);
return clave;
}

public String getNombrep()
{
String nombre = JOptionPane.showInputDialog("Nombre:\t");
JOptionPane.showMessageDialog(null,"Nombre\n"+nombre);
return nombre;
}

public String getAp2()
{
String apeP = JOptionPane.showInputDialog("Apellido Paterno:\t");
JOptionPane.showMessageDialog(null,"Apellido Paterno\n"+apeP);
return apeP;
}

public String getAm2()
{
String apeM = JOptionPane.showInputDialog("Apellido materno:");
JOptionPane.showMessageDialog(null,"Apellido Materno\n"+apeM);
return apeM;
}

public String getPuesto1()
{
String puesto = JOptionPane.showInputDialog("Puesto:");
JOptionPane.showMessageDialog(null,"Puesto\n"+puesto);
return puesto;
}

public String getEsp()
{
String espe = JOptionPane.showInputDialog("Especialidad:");
JOptionPane.showMessageDialog(null,"Especialidad\n"+espe);
return espe;
}

public int getTiempoe()
{
boolean  bandera = false;
int tiempo = 0;
do
{
try
{
tiempo = (Integer.parseInt(JOptionPane.showInputDialog("Tiempo en la empresa:\t")));
bandera=true;
}
catch(NumberFormatException nft)
{JOptionPane.showMessageDialog(null,"Error ingreso un dato no valido");}
}while(bandera!=true);
JOptionPane.showMessageDialog(null, "Tiempo en la empresa\n" + tiempo);
return tiempo;
}

public Object getSex2()
{
Object sexo = (JOptionPane.showInputDialog(null,"Seleccione sexo","Sexo",
JOptionPane.QUESTION_MESSAGE,null, new Object[]
{ "Masculino", "Femenino"},"Masculino"));
JOptionPane.showMessageDialog(null, "Sexo\n" + sexo);
return sexo;
}

/* Ingresar Proveedores*/
public String getNombrePr()
{
String provee = JOptionPane.showInputDialog("Proveedor:\t");
JOptionPane.showMessageDialog(null, "Proveedor\n" + provee);
return provee;
}

public String getDirecpr()
{
String direc = JOptionPane.showInputDialog("Direccion:\t");
JOptionPane.showMessageDialog(null, "Direccion\n" + direc);
return direc;
}

public String getCiudad1()
{
String ciudad = JOptionPane.showInputDialog("Ciudad:\t");
JOptionPane.showMessageDialog(null, "Ciudad\n" + ciudad);
return ciudad;
}

public String getEmail()
{
String mail = JOptionPane.showInputDialog("E-Mail:\t");
JOptionPane.showMessageDialog(null, "E-Mail\n" + mail);
return mail;
}

public int getTelefono()
{
boolean  bandera = false;
int telef = 0;
do
{
try
{
telef = (Integer.parseInt(JOptionPane.showInputDialog("telefono:\t")));
bandera=true;
}
catch(NumberFormatException nft)
{JOptionPane.showMessageDialog(null,"Error ingreso un dato no valido");}
}while(bandera!=true);
JOptionPane.showMessageDialog(null, "Telefono\n" + telef);
return telef;
}

}

Se podría haber reducido más el código, ya que por ejemplo hay métodos que son iguales.
Los métodos para pedir nombres o los de pedir apellidos.. son iguales tanto si es para una Jugador como si es para Personal.
Así que con solo un método para pedir Nombre nos hubiera servido para todas las clases.
De hecho, esta clase no tiene porque saber nada acerca de Jugadores, Proveedores,...

Su única función es mostrar ventanas con los mensajes adecuados para pedir los datos correspondientes.

La clase MenuBueno no he cambiado nada. Lo único que considero que es un poco innecesaria su existencia. El metodo main() podría estar incluido en la clase MenuV2 y lanzarse el programa desde ahí. Pero bueno, no importa demasiado.

Sobre la clase MenuV2, tampoco ha cambiado demasiado.
He quitado de nuevo varios atributos innecesarios y objetos innecesarios.
Esta clase no necesita ningún BufferedReader, ni objetos Jugadores, ni tampoco objetos MenuV2 (es decir, ella misma estaba declarada como un atributo más)

MenuV2:
Código: [Seleccionar]
import java.io.IOException;

import javax.swing.JOptionPane;

public final class MenuV2 {

private CrearFile2 cf2 = new CrearFile2();

public MenuV2()
{}

public void setMenuV2() throws IOException
{
int opcion = 0;
do
{
opcion=Integer.parseInt(JOptionPane.showInputDialog(null,"1.Registrar\n"+"2.Eliminar registro\n"+"3.Consultar\n"+"4.Salir"));
switch (opcion)
{
case 1:
int opc=0;
do
{
opc=Integer.parseInt(JOptionPane.showInputDialog(null,"1.Agregar jugadores\n"+"2.Agregar Personal\n"+"3.Agregar Proveedores\n"+"4.Salir"));
switch(opc){
case 1:
cf2.setCrearJugadores(); break;
case 2:
cf2.setCrearPersonal(); break;
case 3:
cf2.setCrearProveedores(); break;
case 4:
JOptionPane.showMessageDialog(null,"Volviendo al menu principal");break;
default:
JOptionPane.showMessageDialog(null,"Opcion invalida");
}
}while(opc!=4);
break;
case 2:
cf2.setEliminar(); break; 
case 3:
cf2.setConsulta();break;         
case 4:
JOptionPane.showMessageDialog(null,"Salio del sistema"); break;

default:
JOptionPane.showMessageDialog(null,"Opcion invalida");

}
}while(opcion!=4);
}

}

Esta clase solo necesita tener como atributo a la clase CrearFile2, ya que todo lo que tiene que hacer es mostrar menus de opciones, y segun lo que escoja el usuario, pedirle a CrearFile2 que haga una cosa o la otra.


Y ahora llegamos a la clase CrearFile2, que es la más importante de todas.
Aquí es donde más cambios he hecho, aunque a nivel funcional ya estaba casi completa.
De nuevo he eliminado atributos y objetos que no eran necesarios.
He simplificado los métodos para crear Jugadores, Personal y Proveedores al valernos del metodo toString()
Además en estos metodos ya no pregunto si el archivo existe o no existe. En realidad nos da igual si existe o no. Si te fijas, tu preguntabas pero hacías exactamente lo mismo tanto si existía como si no..
Para estos metodos no necesitamos saber si existe o no. El objeto BufferedWriter se encarga por si solo.
Si el archivo existe agregará nuevas lineas, si no existe, creará un archivo nuevo.

Los metodos setConsulta() y setMostrarB() son dos versiones distintas para hacer una misma cosa.
He modificado el setConsulta() para hacerlo funcionar con un objeto BufferedReader y es el que estoy usando para hacer consultas.

El setMostrarB() no lo estoy usando pero lo he dejado como version alternativa ya que es lo mismo pero con un Scanner en lugar de un BufferedReader.

Por último, el metodo setEliminar(), que es el más dificil y el que te traía de cabeza supongo.
Lo he simplificado utilizando un ArrayList para leer las lineas del archivo antes de eliminar lo que pida el usuario.
Tu lo intentabas hacer con un arreglo normal, pero esta estructura es demasiado primitiva y hay que complicar mucho el código para que funcione bien.
En este método he puesto bastante comentarios explicando cada paso y creo que se entiende bastante bien. Miratelo y pregunta cualquier duda que tengas.
No se si te pondrán alguna pega por estar usando un ArrayList, si hubiera que utilizar un arreglo simple, dímelo y podemos hacer una versión alternativa.

CrearFile2:
Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JOptionPane;

public final class CrearFile2 {

/*
* Como atributos de clase solo necesitamos el objeto File para escribir al archivo
* y un objeto LeerMostrar5 para pedir datos usando sus métodos.
*/
File archivo= new File("C:\\Prueba\\EquipoV.txt");
LeerMostrar5 lm5 = new LeerMostrar5();

public void setCrearJugadores()
{
try
{
//Preparamos archivo para escribir
BufferedWriter bw = new BufferedWriter(new FileWriter(archivo, true));
//Creamos un jugador nuevo.
Jugadores jugador = new Jugadores();
//Pedimos datos usando métodos de la clase LeerMostrar5
jugador.setMatricula(lm5.getMatricula2());
jugador.setNombre(lm5.getNombreJ());
jugador.setAp(lm5.getApe());
jugador.setAm(lm5.getAma());
jugador.setNumeroCa(lm5.getNumC());
jugador.setPosicion(lm5.getPosic());
jugador.setEstatus(lm5.getEstatus1());
jugador.setSexo(lm5.getSex1());
/*
* Ya tenemos un Jugador creado.
* Ahora guardamos todos sus datos en el archivo.
* Usamos el metodo .toString() para tener todos los datos
* preparados en una sola linea.
*/
bw.write(jugador.toString());
bw.newLine();
bw.close();
}
catch(Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null,ex.getLocalizedMessage());
}

}   

public void setCrearPersonal(){

try {
BufferedWriter bw = new BufferedWriter(new FileWriter(archivo, true));
Personal personal = new Personal();
personal.setClave(lm5.getClave());
personal.setNombre(lm5.getNombrep());
personal.setAp(lm5.getAp2());
personal.setAm(lm5.getAm2());
personal.setPuesto(lm5.getPuesto1());
personal.setEspecialidad(lm5.getEsp());
personal.setTiempoE(lm5.getTiempoe());
personal.setSexo(lm5.getSex2());
bw.write(personal.toString());
bw.newLine();
bw.close();
}
catch(Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null,ex.getLocalizedMessage());
}
}

public void  setCrearProveedores() throws IOException
{
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(archivo, true));
Proveedores proveedor = new Proveedores();
proveedor.setNombre(lm5.getNombrep());
proveedor.setDireccion(lm5.getDirecpr());
proveedor.setCiudad(lm5.getCiudad1());
proveedor.setEmail(lm5.getEmail());
proveedor.setTelefono(lm5.getTelefono());
bw.write(proveedor.toString());
bw.newLine();
bw.close();
}
catch(Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null,ex.getLocalizedMessage());
}
}

public void setConsulta()
{
if (archivo.exists())
{
String datoAbuscar = JOptionPane.showInputDialog("Dato a buscar:");

try {

BufferedReader br = new BufferedReader(new FileReader(archivo));

String lineaArchivo = br.readLine();//Leemos primera linea

while (lineaArchivo != null) {//Si no es null, es que hemos podido leer linea

if (lineaArchivo.startsWith(datoAbuscar))
JOptionPane.showMessageDialog(null,"Dato Buscado:\n" + lineaArchivo);

lineaArchivo = br.readLine();//Leemos otra linea, si no quedasen, tendriamos null y el bucle terminará
}
br.close();
} catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
}
}
else
JOptionPane.showMessageDialog(null, "No se puede consultar\nNo existe fichero: " + archivo.getAbsolutePath());
}

public void setMostrarB() throws IOException
{
try {

Scanner lector = new Scanner(archivo);
String datoAbuscar =  JOptionPane.showInputDialog("Dato a buscar:");
while (lector.hasNextLine()) {
String datoBuscado = lector.nextLine();

if (datoBuscado.startsWith(datoAbuscar)) {
JOptionPane.showMessageDialog(null,"Dato buscado\n" + datoBuscado);
}


}
}catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "No se ha encontrado el fichero " + archivo.getAbsolutePath());
e.printStackTrace();//Muestra por consola la "traza" del error
}
}

public void setEliminar() {

if (archivo.exists())
{
String clave = JOptionPane.showInputDialog("Dame clave a eliminar");
/*
* Leeremos todas las lineas existentes en el archivo para tenerlas en memoria.
* Como no sabemos cuantas lineas puede haber, es más comodo guardarlas en un ArrayList
* ya que no hay que indicarle un tamaño específico, y permite añadir/eliminar datos.
* Un arreglo normal no nos da esta flexibilidad y nos complica demasiado el codigo.
*
*  Cada vez que leemos una nueva linea, podemos comprobar si coinciden con la clave
*  que queremos eliminar. Si coincide, preguntamos al usuario si es esta la clave que quiere
*  eliminar.
*  Si DENIEGA eliminar la clave, la añadimos al ArrayList y seguimos leyendo lineas.
*  Si CONFIRMA que es la clave a eliminar, NO la añadiremos al ArrayList, aunque seguiremos
*  leyendo y preguntando en caso de encontrar más coincidencias.
*/
try {
ArrayList<String> lineas = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader(archivo));
String linea = br.readLine();
while (linea != null)
{
if (linea.startsWith(clave))//Coincidencia, preguntamos si quiere eliminar
{
int confirmar = JOptionPane.showConfirmDialog(null, "Se ha encontrado:\n"
+ linea + "\n¿SEguro que quiere borrar?", "Confirmar Eliminacion", JOptionPane.YES_NO_OPTION);
if (confirmar == JOptionPane.YES_OPTION)//SI quiere borrar. Por tanto, no la añadimos al ArrayList
{
JOptionPane.showMessageDialog(null, "El dato será eliminado");
}
else//No quiere borrar. Por tanto, SI lo añadimos al ArrayList
{
lineas.add(linea);
}
}
else//No ha habido coincidencia. Añadimos linea al ArrayList sin preguntar nada.
{
lineas.add(linea);
}
linea = br.readLine();//Leemos nueva linea y repetimos bucle
}
br.close();
/*
* Bucle de lectura finalizado.
* Ahora mismo en el ArrayList tenemos las lineas que
* el usuario NO ha querido borrar. Solo queda volver a
* escribirlas en el fichero sustituyendo todos los datos que contiene ahora.
*
* Por tanto, primero intentaremos borrar el archivo actual para crear uno nuevo
*/

if (archivo.delete())
{
BufferedWriter bw = new BufferedWriter(new FileWriter(archivo, true));
//Ahora recorremos el ArrayList y vamos grabando cada una de las lineas que contiene
for (String line: lineas)
{
bw.write(line);
bw.newLine();
}
//Listo. Ya se ha han guardado los cambios.
bw.close();
JOptionPane.showMessageDialog(null, "Los cambios se han guardado");
}
else//Por algun motivo, no se ha podido borrar el archivo
{
JOptionPane.showMessageDialog(null, "No se ha podido modificar el archivo: " + archivo.getAbsolutePath());
}

}
catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
}

}

}
}


Y esto es todo. Yo lo he probado y funciona.
Creo que dijiste que una opcion era mostrar TODO el contenido del archivo de texto al usuario.
Es lo único que faltaría por añadir.

Cualquier duda, ya sabes, pregunta por aquí
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #13 en: 06 de Junio 2018, 20:42 »
Tengo un pregunta para poder hacer modificación puedo utilizar osea basarme en el código de eliminación?

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #14 en: 06 de Junio 2018, 21:15 »
Tengo un pregunta para poder hacer modificación puedo utilizar osea basarme en el código de eliminación?

Sí.
Porque si no me equivoco, no puedes modificar una linea de texto, o al menos yo no se hacerlo.
Me refiero a una modificación "real".

Yo lo haría igual a como hemos hecho en el método de eliminación.
Leer todas las lineas y pasarlas al ArrayList.
Antes de pasarla, si la linea coincide con la clave que el usuario ha proporcionado, preguntamos si quiere modificar esa linea.

Si dice que NO quiere modificarla, la añadimos al ArrayList y seguimos buscando lineas.

Si dice que SI quiere modificarla, entonces no añadimos esa línea. Quizás lo más fácil sería pedir de nuevo todos los datos, crear un objeto nuevo y lo que metemos en el ArrayList es lo que nos devuelva el metodo toString() de este nuevo objeto que acabamos de crear.

Pero esto presenta un problema importante. Nosotros, solo con leer el archivo, no podemos saber si la linea que estamos leyendo pertenece a un Jugador, un Personal o un Proveedor
Una vez guardados los datos en el archivo de texto, no hay nada que distinga uno de otros.

Así que a la hora de modificar una linea, no sabremos que tipo de nuevo objeto tendremos que crear.

Se me ocurren dos soluciones posibles:
1) Cuando pidamos datos al usuario para hacer la modificación, lo primero que le preguntamos es si quiere crear un Jugador, un Personal o un Proveedor.
Y según lo que indique decidimos que objeto crear, y que datos pedir..

2) Modificar el método toString() para que al final de la linea añada el tipo de clase al que pertenece.
Así, en el archivo de texto cada linea terminará con la palabra Jugadores, o Personal, o Proveedor.
Y así, con el metodo endsWith(), luego en el programa podemos determinar a que clase pertenece cada linea.
Algo así...
Código: [Seleccionar]
if (linea.endsWith("Personal"))
{
    //La linea pertenece a la clase Personal
}
else if (linea.endsWith("Jugadores"))
{
    //La linea pertenece a la clase Jugadores
}
else
{
    //La linea pertenece a Proveedores
}


Como ves, modificar una linea se parece un poco a eliminar..... pero en realidad supone nuevos retos..  :o
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #15 en: 07 de Junio 2018, 05:20 »
Si dice que SI quiere modificarla, entonces no añadimos esa línea. Quizás lo más fácil sería pedir de nuevo todos los datos, crear un objeto nuevo y lo que metemos en el ArrayList es lo que nos devuelva el metodo toString() de este nuevo objeto que acabamos de crear.

De acuerdo a lo que dijiste aqui es lo que quiero que haga mi programa pero no se como implementarlo en el codigo soy novata en este lenguaje y se me es un poco complicado entender algunas cosas como lo implementaria tu en el codigo de eliminacion¿?

Disculpa por mi ignorancia  :-\

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #16 en: 07 de Junio 2018, 14:17 »
Como dijimos, el proceso es muy similar al de eliminar. Solo que ahora hay que crear un nuevo objeto, por lo tanto hay que pedir datos al usuario y tal.

Entonces vamos a hacer un método que va a ser prácticamente idéntico al de setEliminar() y lo vamos a llamar setModificar().
Este método, ahora mismo ya tiene muchos if, muchos else, que si while()..., que si try ....
Resulta un poco lioso a los ojos, y ahora encima tenemos que meter más código. Así que para sea más legible, lo que vamos a hacer es crear un segundo método de apoyo, que se encargará de pedir al usuario datos, construir un objeto nuevo y devolver los datos en un String para meterlo en el ArrayList.
Así todo el proceso está separado en dos métodos y es más agradable a la vista. Tener un único método gigantesto con muchas lineas, muchas bifurcaciones... produce fatiga visual y mental, y creeme que esto dificulta resolver problemas de programación.

Bueno, mira. Este sería el método setModificar()
Fíjate que es prácticamente idéntico al de setEliminar(), solo varían los mensajes que mostramos al usuario y lo más importante, la línea que está señalada en color rojo:
Citar
public void setModificar()
   {
      if (archivo.exists())
      {
         String clave = JOptionPane.showInputDialog("Dame clave a modificar");
         try {
            ArrayList<String> lineas = new ArrayList<>();
            BufferedReader br = new BufferedReader(new FileReader(archivo));
            String linea = br.readLine();
            while (linea != null)
            {
               if (linea.startsWith(clave))
               {
                  int confirmar = JOptionPane.showConfirmDialog(null, "Se ha encontrado:\n"
                        + linea + "\n¿Seguro que quiere modificar?", "Confirmar Modificacion", JOptionPane.YES_NO_OPTION);
                  if (confirmar == JOptionPane.YES_OPTION)
                  {
                     lineas.add(getLineaModificada(linea));
                  }
                  else//No quiere modificar
                     lineas.add(linea);
               }
               else//Linea no coincide con clave
                  lineas.add(linea);
               
               linea = br.readLine();
            }
            br.close();
            //Guardamos los cambios en el archivo.
            if (archivo.delete())
            {
               BufferedWriter bw = new BufferedWriter(new FileWriter(archivo, true));
               for (String line: lineas)
               {
                  bw.write(line);
                  bw.newLine();
               }
               bw.close();
               JOptionPane.showMessageDialog(null, "Los cambios se han guardado");
            }
            else//Por algun motivo, no se ha podido borrar el archivo
            {
               JOptionPane.showMessageDialog(null, "No se ha podido modificar el archivo: " + archivo.getAbsolutePath());
            }

         }catch(Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
         }
      }
      else//No existe archivo
         JOptionPane.showMessageDialog(null, "No existe fichero: " + archivo.getAbsolutePath());
   }

Marcado en rojo vemos que lo que añadiremos al ArrayList, será un String que nos devolverá el metodo de apoyo getLineaModificada()
Este método le pasamos la linea con los datos actuales y se encargará de preguntar al usuario que datos quiere modificar.
Recuerda que llegados a este punto, nos encontrabamos con el problema de que a través de la linea que hemos leido del fichero, NO podemos saber si se trata de un Jugador, o un Proveedor o alguien de Personal.

Se nos ocurrían dos soluciones:
1.- Hacer que las lineas de texto terminen indicando a que clase pertenecen.
Para esto habría que hacer una pequeña modificacion en los métodos .toString() de las tres clases que heredan de Persona.
Así tendríamos lineas como estas:
Citar
4567|Juan|Lopez|Canovas|8|Alero|Activo|Masculino|Jugador
Mikasa|C/Marcos|Madrid|mikasa@pelotas.net|678906543|Proveedor
Así comprobando la última palabra, podríamos deducir a que clase pertenece cada linea.

2.- Preguntar directamente al usuario qué tipo de clase está modificando. Y según su respuesta, procedemos de un modo u otro.


Personalmente, prefiero la primera opción. Creo que lo correcto es que el programa sepa identificar por sí solo a cual clase pertenece cada linea y no tener que preguntarle al usuario.
Así que primero voy a modificar los métodos toString() para que incluyan este nuevo dato identificativo:
Clase Jugadores:
Código: [Seleccionar]
@Override
public String toString()
{
return matricula + "|" + super.getNombre() + "|" + super.getAp()  + "|"
+ super.getAm() + "|" + numeroca  + "|" + posicion  + "|" + estatus +
"|" + super.getSexo()  + "|Jugador" ;
}

Clase Personal:
Código: [Seleccionar]
@Override
public String toString()
{
return clave + "|" + super.getNombre() + "|" + super.getAp() + "|"
+ super.getAm() + "|" +  puesto + "|" + especialidad + "|" + tiempoe
+ "|" + super.getSexo() + "|Personal";
}

Clase Proveedores:
Código: [Seleccionar]
@Override
public String toString()
{
return super.getNombre() + "|" + direccion + "|" + ciudad  + "|"
+ email + "|" + telefono + "|Proveedor";
}

Ahora ya solo hay que ponerse con el método getLineaModificada()

Este método es sencillo, pero tiene muchas líneas porque hay que incluir todas las preguntas necesarias para modificar un Jugador, un Proveedor o un Personal.

Básicamente lo que hace es identificar a que clase pertenece la linea que recibe.
Según a la clase que pertenezca, recupera los datos de la linea por separado para construir un objeto de esta clase.
Luego muestra estos datos uno por uno al usuario, y este decide si quiere modificarlo o no.
Una vez modificado, lo devuelve en un String y el metodo setModificar() se encargará de guardarlo en el fichero de texto.

Para separar los datos de la linea y poder construir el objeto, he usado el metodo split() de la clase String. Si no lo conoces o tienes dudas, pregunta y lo explicamos un poco.

De momento te pongo el método con el codigo necesario para modificar una linea perteneciente a la clase Jugadores.
Incluye comentarios para que se entienda bien cuál es el proceso seguido.

Faltaría el código para modificar lineas de las clases Proveedores y Personal.
Eso te lo dejo para que lo hagas tú.
Básicamente es repetir los mismos pasos seguidos para modificar Jugadores, solo cambian las preguntas porque cada clase tiene distintos datos/atributos.

Por último, solo aclarar que este método va incluido dentro de la clase CrearFile2
Lo he declarado como private porque se supone que este método no debería ser invocado desde otras clases. Es un método de apoyo que solo ha de ser invocado por el método setModificar(), quien sí es public porque será invocado desde otras clases (concretamente desde la clase MenuV2)

Código: [Seleccionar]
private String getLineaModificada(String linea)
{
String lineaModificada = null;//Esta será la linea que vamos a devolver con las modificaciones

if (linea.endsWith("Jugador"))//La linea pertenece a la clase Jugadores
{
/*
* Antes de modificar, creamos un objeto de la clase Jugadores
* recuperando los datos de la linea que hemos leido.
* Puesto que los datos de la linea están separados por el simbolo "|"
* esto nos viene de maravilla para obtener los datos por separado en
* un arreglo simple usando el metodo split() de la clase String.
*
* El simbolo "|", tambien llamado pipe o barra vertical es un simbolo especial,
* lo que se llama un "meta caracter".
* Para poder usarlo como "expresion regular" en el metodo split(), es necesario
* "escaparlo" con doble backslash para que lo reconozca
*/
String[] datosJugador = linea.split("\\|");
//Construimos un Jugador con los datos obtenidos
Jugadores jugador = new Jugadores();
jugador.setMatricula(Integer.parseInt(datosJugador[0]));
jugador.setNombre(datosJugador[1]);
jugador.setAp(datosJugador[2]);
jugador.setAm(datosJugador[3]);
jugador.setNumeroCa(Integer.parseInt(datosJugador[4]));
jugador.setPosicion(datosJugador[5]);
jugador.setEstatus(datosJugador[6]);
jugador.setSexo(datosJugador[7]);
/*
* Ya tenemos un Jugador con los datos ACTUALES.
* Ahora hay que preguntar al usuario que datos quiere modificar.
* Podemos mostrarle los datos actuales uno a uno y que elija si quiere modificar o no.
* Cuando quiera modificar alguno, usamos la clase LeerMostrar5 para pedir el dato adecuado.
*/
//Preguntamos por matricula
int respuesta = JOptionPane.showConfirmDialog(null, "Matricula Actual:\n" + jugador.getMatricula() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)//SÍ quiere modificar
jugador.setMatricula(lm5.getMatricula2());

//Preguntamos por nombre
respuesta = JOptionPane.showConfirmDialog(null, "Nombre Actual:\n" + jugador.getNombre() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setNombre(lm5.getNombreJ());

//Apellido Paterno
respuesta = JOptionPane.showConfirmDialog(null, "Apellido Paterno Actual:\n" + jugador.getAp() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setAp(lm5.getApe());

//Apellido Materno
respuesta = JOptionPane.showConfirmDialog(null, "Apellido Materno Actual:\n" + jugador.getAm() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setAm(lm5.getAma());

//Numero Camiseta
respuesta = JOptionPane.showConfirmDialog(null, "Numero Camiseta Actual:\n" + jugador.getNumeroCa() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setNumeroCa(lm5.getNumC());

//Posicion
respuesta = JOptionPane.showConfirmDialog(null, "Posicion Actual:\n" + jugador.getPosicion() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setPosicion(lm5.getPosic());

//Status
respuesta = JOptionPane.showConfirmDialog(null, "Estado Actual:\n" + jugador.getEstatus() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setEstatus(lm5.getEstatus1());

//Sexo
respuesta = JOptionPane.showConfirmDialog(null, "Sexo Actual:\n" + jugador.getSexo() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setSexo(lm5.getSex1());

/*
* Ya tenemos al Jugador con las modificaciones que haya elegido el usuario.
* Lo convertimos en una linea String y el método lo retornará para que sea incluido
* en el ArrayList del método setModificar() quien se encargará de guardarlo en el fichero
*/
lineaModificada = jugador.toString();
}
else if (linea.endsWith("Personal"))//La linea pertenece a la clase Personal
{
//Contruir objeto Personal, preguntar al usuario modificaciones y convertirlo a String
}
else if (linea.endsWith("Proveedor"))//La linea pertenece a la clase Proveedores
{
//Contruir objeto Proveedores, preguntar al usuario modificaciones y convertirlo a String
}

return lineaModificada;//Finalizado el metodo, esta linea contendrá los datos de un Jugador, o un Proveedor o un Personal
}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #17 en: 11 de Junio 2018, 02:36 »
Hola que tal de nuevo estaba haceindo el metodo de modificar con tu me lo habias explicado pero al momento de darle que si al modificar me parace este error
Código: [Seleccionar]
java.lang.NullPointerException
at java.io.Writer.write(Writer.java:157)
at CrearFile2.setModificar(CrearFile2.java:237)
at MenuV2.setMenuV2(MenuV2.java:50)
at MenuBueno.main(MenuBueno.java:12)

y no me es posible modificar nada por que enseguida sale y lo hice tal cual me lo marcaste
Código: [Seleccionar]
private String getLineaModificada(String linea)
{
String lineaModificada = null;//Esta será la linea que vamos a devolver con las modificaciones

if (linea.endsWith("Jugador"))//La linea pertenece a la clase Jugadores
{
String[] datosJugador = linea.split("\\|");
//Construimos un Jugador con los datos obtenidos
Jugadores jugador = new Jugadores();
jugador.setMatricula(Integer.parseInt(datosJugador[0]));
jugador.setNombre(datosJugador[1]);
jugador.setAp(datosJugador[2]);
jugador.setAm(datosJugador[3]);
jugador.setNumeroCa(Integer.parseInt(datosJugador[4]));
jugador.setPosicion(datosJugador[5]);
jugador.setEstatus(datosJugador[6]);
jugador.setSexo(datosJugador[7]);

       //Preguntamos por matricula
int respuesta = JOptionPane.showConfirmDialog(null, "Matricula Actual:\n" + jugador.getMatricula() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)//SÍ quiere modificar
jugador.setMatricula(lm5.getMatricula2());

//Preguntamos por nombre
respuesta = JOptionPane.showConfirmDialog(null, "Nombre Actual:\n" + jugador.getNombre() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setNombre(lm5.getNombreJ());

//Apellido Paterno
respuesta = JOptionPane.showConfirmDialog(null, "Apellido Paterno Actual:\n" + jugador.getAp() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setAp(lm5.getApe());

//Apellido Materno
respuesta = JOptionPane.showConfirmDialog(null, "Apellido Materno Actual:\n" + jugador.getAm() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setAm(lm5.getAma());

//Numero Camiseta
respuesta = JOptionPane.showConfirmDialog(null, "Numero Camiseta Actual:\n" + jugador.getNumeroCa() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setNumeroCa(lm5.getNumC());

//Posicion
respuesta = JOptionPane.showConfirmDialog(null, "Posicion Actual:\n" + jugador.getPosicion() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setPosicion(lm5.getPosic());

//Status
respuesta = JOptionPane.showConfirmDialog(null, "Estado Actual:\n" + jugador.getEstatus() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setEstatus(lm5.getEstatus1());

//Sexo
respuesta = JOptionPane.showConfirmDialog(null, "Sexo Actual:\n" + jugador.getSexo() + "\n¿Modificar?",
"Modificar Jugador", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
jugador.setSexo(lm5.getSex1());


        lineaModificada = jugador.toString();
}
else if (linea.endsWith("Personal"))//La linea pertenece a la clase Personal
{
   String[] datosPersonal = linea.split("\\|");
//Construimos un Jugador con los datos obtenidos
Personal p = new Personal();
p.setClave(Integer.parseInt(datosPersonal[0]));
p.setNombre(datosPersonal[1]);
p.setAp(datosPersonal[2]);
p.setAm(datosPersonal[3]);
p.setPuesto(datosPersonal[4]);
p.setEspecialidad(datosPersonal[5]);
p.setTiempoE(Integer.parseInt(datosPersonal[6]));
p.setSexo(datosPersonal[7]);

         
int respuesta = JOptionPane.showConfirmDialog(null, "Clave Actual:\n" + p.getClave() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)//SÍ quiere modificar
p.setClave(lm5.getClave());

//Preguntamos por nombre
respuesta = JOptionPane.showConfirmDialog(null, "Nombre Actual:\n" + p.getNombre() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setNombre(lm5.getNombrep());

//Apellido Paterno
respuesta = JOptionPane.showConfirmDialog(null, "Apellido Paterno Actual:\n" + p.getAp() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setAp(lm5.getAp2());

//Apellido Materno
respuesta = JOptionPane.showConfirmDialog(null, "Apellido Materno Actual:\n" + p.getAm() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setAm(lm5.getAm2());

//Puesto
respuesta = JOptionPane.showConfirmDialog(null, "Puesto Actual:\n" + p.getPuesto() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setPuesto(lm5.getPuesto1());

//Especialidad
respuesta = JOptionPane.showConfirmDialog(null, "Especialidad Actual:\n" + p.getEspecialidad() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setEspecialidad(lm5.getEsp());

//Tiempo en la empresa
respuesta = JOptionPane.showConfirmDialog(null, "Estado Actual:\n" + p.getTiempoE() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setTiempoE(lm5.getTiempoe());

//Sexo
respuesta = JOptionPane.showConfirmDialog(null, "Sexo Actual:\n" + p.getSexo() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
p.setSexo(lm5.getSex2());

lineaModificada = p.toString();
}
else if (linea.endsWith("Proveedor"))//La linea pertenece a la clase Proveedores
{
String[] datosProveedores = linea.split("\\|");
//Construimos un Jugador con los datos obtenidos
Proovedores pr = new Proovedores();
//pr.setClave(Integer.parseInt(datosPersonal[0]));
pr.setNombre(datosProveedores[0]);
pr.setDireccion(datosProveedores[1]);
pr.setCiudad(datosProveedores[2]);
pr.setEmail(datosProveedores[3]);
pr.setTelefono(Integer.parseInt(datosProveedores[4]));

        //Preguntamos por Nombre
int respuesta = JOptionPane.showConfirmDialog(null, "Nombre Actual:\n" + pr.getNombre() + "\n¿Modificar?",
"Modificar Personal", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)//SÍ quiere modificar
pr.setNombre(lm5.getNombrePr());

//Direccion
respuesta = JOptionPane.showConfirmDialog(null, "Direccion Actual:\n" + pr.getDireccion() + "\n¿Modificar?",
"Modificar Proveedores", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
pr.setDireccion(lm5.getDirecpr());

//Ciudad
respuesta = JOptionPane.showConfirmDialog(null, "Ciudad Actual:\n" + pr.getCiudad() + "\n¿Modificar?",
"Modificar Proveedores", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
pr.setCiudad(lm5.getCiudad1());

//Email
respuesta = JOptionPane.showConfirmDialog(null, "Email Actual:\n" + pr.getEmail() + "\n¿Modificar?",
"Modificar Proveedores", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
pr.setEmail(lm5.getEmail());

//Telefono
respuesta = JOptionPane.showConfirmDialog(null, "Telefono Actual:\n" + pr.getTelefono() + "\n¿Modificar?",
"Modificar Proveedores", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION)
pr.setTelefono(lm5.getTelefono());

lineaModificada = pr.toString();
}

return lineaModificada;//Finalizado el metodo, esta linea contendrá los datos de un Jugador, o un Proveedor o un Personal
}

tal vez tenga algun error el codigo de moficacion y ya lo cheque y me digue mandado ese error

China

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #18 en: 11 de Junio 2018, 04:20 »
Ya me salio el metodo modiicar pero me surgio un problema es que necesito agregar la lectra de archivos para poder hacer mi listado de todo loque tengo pero realmente nose como implemntarlo ¿tengo que moficarto todo el codigo?
al moemnto de consultar me aparece todo con todo los pipes ejemplo:

12|Jorge|Perez|Sanchez|Entrenador|Doctor|25|Masculino|Personal

y lo que yo quiero es que mestre esto
clave: 12
nombre: jorge.... y asi sucesivamente pero creo que tengo que hacer lectura de todos mis datos como lo puedo implementar

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Como hago que me elimine el dato archivos java en jgraps
« Respuesta #19 en: 12 de Junio 2018, 01:42 »
Hola.
Entiendo a que te refieres a que ahora mismo, cuando mostramos el dato consultado, lo que mostramos es una linea "fea" con todos los datos separados por los pipes.
Esto se puede mejorar fácilmente, y bastaría con escribir un nuevo método que se encargue de recibir la "línea fea", separar los datos y construir un String más elegante con los datos, el nombre del dato, saltos de linea,...

La "línea fea" la estamos mostrando desde este JOptionPane situado en el metodo setConsulta() de la clase CrearFile2

Código: [Seleccionar]
if (lineaArchivo.startsWith(datoAbuscar))
    JOptionPane.showMessageDialog(null,"Dato Buscado:\n" + lineaArchivo);
Ahí es donde le estamos pasando la "linea fea", tal cual está en el archivo. En vez de eso, lo que le vamos a pasar es el String que nuestro nuevo método va a construir a partir de esa línea.
El método ha de distinguir si la linea pertenece a un Jugador, Proveedor o Personal, pues el texto que va a construir será diferente para cada uno de ellos.
Así que, tal y como hicimos en el metodo getLineaModificada(), preguntaremos cual es la última palabra de la linea para distinguir a que clase pertenece y escribiremos un texto diferente para cada caso.

Este podría ser el método, que estaría incluido en la clase CrearFile2:
Código: [Seleccionar]
private String mostrarDatos(String lineaFea)
{
String datosAMostrar;
String[] datos = lineaFea.split("\\|");

if (lineaFea.endsWith("Jugador"))
{
datosAMostrar = "        JUGADOR\n\nMatricula: " + datos[0] + "\nNombre: " + datos[1] + "\nApe. Paterno: " + datos[2]
+ "\nApe. Materno: " + datos[3] + "\nNº Camiseta: " + datos[4] + "\nPosicion: " + datos[5]
+ "\nSexo: " + datos[6];
}
else if (lineaFea.endsWith("Personal"))
{
datosAMostrar = "        PERSONAL\n\nClave: " + datos[0] + "\nNombre: " + datos[1] + "\nApe. Paterno: " + datos[2]
+ "\nApe. Materno: " + datos[3] + "\nPuesto: " + datos[4] + "\nEspecialidad: " + datos[5]
+ "\nTiempo en Empresa: " + datos[6] + "\nSexo: " + datos[7];
}
else if (lineaFea.endsWith("Proveedor"))
{
datosAMostrar = "        PROVEEDOR\n\nNombre: " + datos[0] + "\nDireccion: " + datos[1] + "\nCiudad: " + datos[2]
+ "\nE-Mail: " + datos[3] + "\nTelefono: " + datos[4];
}
else//En el MUY improbable caso de que no pudieramos identificar la clase de la linea...
return lineaFea;//...devolvemos la "linea fea" tal cual. Esta situación no debería ocurrir nunca, pero por si a caso...

return datosAMostrar;
}

Apoyándonos en este método, ahora al JOptionPane del metodo setConsulta() lo lanzamos así:
Código: [Seleccionar]
if (lineaArchivo.startsWith(datoAbuscar))
JOptionPane.showMessageDialog(null,mostrarDatos(lineaArchivo));

No solo ahí, habría que hacer lo mismo en el método setEliminar():

Código: [Seleccionar]
int confirmar = JOptionPane.showConfirmDialog(null, mostrarDatos(linea)
+ "\n\n¿Seguro que quiere borrar?", "Confirmar Eliminacion", JOptionPane.YES_NO_OPTION);

Y en setModificar():

Código: [Seleccionar]
int confirmar = JOptionPane.showConfirmDialog(null, mostrarDatos(linea)
+ "\n\n¿Seguro que quiere modificar?", "Confirmar Modificacion", JOptionPane.YES_NO_OPTION);

Y con esto ya queda algo más elegante cuando mostramos los datos.
Comprueba como funciona y ya luego tu decides si quieres construir el mensaje a mostrar de otra forma distinta.

Lo importante es comprender que lo que hacemos es un metodo que coge la linea de texto, la trocea para identificar los datos, construye un mensaje de presentación y lo devuelve en un String que podemos mostrar desde un JOptionPane o donde sea que podamos necesitarlo.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".