[ Foro de Java ]

ayuda con archivos binarios - FileOutputStream

24-Apr-2015 04:37
Invitado (victor garay)
1 Respuestas

Saludos. estoy guardando pacientes en un archivo binario: numero de expediente, dni, apellidos, nombres, telefono, direccion y fotografia. cuando hago la busqueda a traves del numero del expediente, solo puedo buscar al ultimo paciente ingresado ya que a los anteriores no se encuentran en el archivo binario, al parecer el problema se presenta al guardar los datos se sobreescriben y no lo agregan. aqui les dejo los codigos de guardar y buscar respectivamente a ver si me ayudan. gracias.

 
private void btcGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        Object nombreArchivo = archivo;
        System.out.println(nombreArchivo);
        try{
            ObjectOutputStream fileout = new ObjectOutputStream(new FileOutputStream((String) nombreArchivo));
            fileout.writeObject(txtNroExpediente.getText());
            fileout.writeObject(txtDni.getText());
            fileout.writeObject(txtApellidos.getText());
            fileout.writeObject(txtNombres.getText());
            fileout.writeObject(txtDireccion.getText());
            fileout.writeObject(txtTelefono.getText());
            fileout.writeObject(lblFoto.getIcon()); 
            fileout.flush();
            JOptionPane.showMessageDialog(null, "Los datos del paciente se guardaron corecttamente...");
            if(fileout!=null){
               fileout.close();
            }
        }catch(IOException e){}
        desactivarTextFields();
        btcGuardar.setEnabled(false);
        btcNuevo.setEnabled(true);
        btcBuscar.setEnabled(false);
    }                                          
 
    private void btcBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
        Object nombreArchivo = archivo;
        try{
            try (ObjectInputStream filein = new ObjectInputStream(new FileInputStream((String) nombreArchivo))){
                Object expediente = filein.readObject();
                Object dni = filein.readObject();
                Object apellidos = filein.readObject();
                Object nombres = filein.readObject();
                Object direccion = filein.readObject();
                Object telefono = filein.readObject();
                Object foto = filein.readObject();
            if (txtNroExpediente.getText().equals(expediente)){    
                txtNroExpediente.setText((String) expediente);
                txtDni.setText((String) dni);
                txtApellidos.setText((String) apellidos);
                txtNombres.setText((String) nombres);
                txtDireccion.setText((String) direccion);
                txtTelefono.setText((String) telefono);
                lblFoto.setIcon((Icon) foto);
            }
                if(filein!=null){
                    filein.close();
                }
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(JDPacientes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }catch(IOException e){}   
    }
 




25-Apr-2015 10:43
Nacho Cabanes (+32)

He borrado tu dirección de correo, porque dejar una dirección de correo electrónico a la vista en un foro es una fuente de que sea cazado por robots que luego te enviarán Spam.

Si no abres el fichero en "modo de añadir" (append), se abre en modo de sobreescritura, de manera que cada vez creas un nuevo fichero que destruye el anterior y que, por tanto, sólo tiene un registro.

Deberás añadir un segundo parámetro al abrir el fichero, como puedes ver en la referencia oficial:

http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html
 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)