es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo modificar un archivo txt utilizando jframe en Java.

Tengo datos guardados en un archivo txt. Los he cargado en un JTable en uno de mis formularios y quiero poder editar el archivo txt usando botones en el formulario GUI.
Además, si puede decirme por qué aparecen líneas vacías en el JTable, eso será muy útil.

Aquí está el código del botón de eliminar:

private void delbtnActionPerformed(java.awt.event.ActionEvent evt) {

}

Aquí está el código del botón de modificación:

private void modifybtnActionPerformed(java.awt.event.ActionEvent evt) {
// TODO agregar el código de manejo aquí:
}

Aquí está el código del botón de nueva contraseña:

private void newpassActionPerformed(java.awt.event.ActionEvent evt) {
// TODO agregar el código de manejo aquí:
}

Aquí está el código del botón de nuevo nombre de usuario:

private void newusernameActionPerformed(java.awt.event.ActionEvent evt) {
// TODO agregar el código de manejo aquí:
}

Aquí está el código del botón de vista:

private void viewbtnActionPerformed(java.awt.event.ActionEvent evt) {

try{
    BufferedReader br = new BufferedReader(new FileReader("logindata.txt"));
    String firstLine = br.readLine().trim();
    String[] columnsName = firstLine.split("/");
    DefaultTableModel model = (DefaultTableModel)datatable.getModel();
    model.setColumnIdentifiers(columnsName);

    Object[] tableLines = br.lines().toArray();

    for(int i = 0; i < tableLines.length; i++)
    {
        String line = tableLines[i].toString().trim();
        String[] dataRow = line.split(",");
        model.addRow(dataRow);
    }
}
catch(Exception ep){
    Logger.getLogger(people_info.class.getName()).log(Level.SEVERE, null, ep);
}

}

Aquí está cómo guardé los datos en el archivo txt:

private void submitbtnActionPerformed(java.awt.event.ActionEvent evt) {
String user = usertxt.getText();
String pass = passwordtxt.getText();

try
{
    FileOutputStream ldata = new FileOutputStream("logindata.txt", true);
    PrintWriter printer = new PrintWriter(ldata);

    printer.println(user+","+pass+",&,",&,");
    JOptionPane.showMessageDialog(null,"éxito, por favor inicie sesión");
    printer.close();

    this.setVisible(false);
    login lg = new login();
    lg.setVisible(true);
}
catch(Exception e)
{
    JOptionPane.showMessageDialog(null,"Error, por favor reintente");
}        

}

Aquí está cómo se ve la GUI: https://i.stack.imgur.com/8FwEX.png

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para poder editar el archivo txt utilizando botones en el formulario GUI, es necesario recuperar los datos de la tabla JTable y escribirlos de nuevo en el archivo txt cuando el usuario hace clic en el botón “modificar” o “eliminar”.

    Aquí hay un ejemplo de código para el botón “eliminar”:

    private void delbtnActionPerformed(java.awt.event.ActionEvent evt) {
        int selectedRow = datatable.getSelectedRow();
    
        // eliminar fila de la JTable
        DefaultTableModel model = (DefaultTableModel) datatable.getModel();
        model.removeRow(selectedRow);
    
        // eliminar fila del archivo txt
        try {
            // leer todos los datos del archivo
            BufferedReader br = new BufferedReader(new FileReader("logindata.txt"));
            List<string> lines = br.lines().collect(Collectors.toList());
            br.close();
    
            // eliminar la fila seleccionada de los datos
            lines.remove(selectedRow + 1); // agregar 1 para saltar la fila de encabezado
    
            // escribir los datos actualizados en el archivo
            BufferedWriter bw = new BufferedWriter(new FileWriter("logindata.txt"));
            for (String line : lines) {
                bw.write(line);
                bw.newLine();
            }
            bw.close();
        } catch (IOException ex) {
            Logger.getLogger(people_info.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    Y aquí hay un ejemplo de código para el botón “modificar”:

    private void modifybtnActionPerformed(java.awt.event.ActionEvent evt) {
        int selectedRow = datatable.getSelectedRow();
        String user = newusername.getText();
        String pass = newpass.getText();
    
        // actualizar fila en la JTable
        DefaultTableModel model = (DefaultTableModel) datatable.getModel();
        model.setValueAt(user, selectedRow, 0);
        model.setValueAt(pass, selectedRow, 1);
    
        // actualizar fila en el archivo txt
        try {
            // leer todos los datos del archivo
            BufferedReader br = new BufferedReader(new FileReader("logindata.txt"));
            List<string> lines = br.lines().collect(Collectors.toList());
            br.close();
    
            // actualizar la fila seleccionada en los datos
            String[] fields = lines.get(selectedRow + 1).split(",");
            fields[0] = user;
            fields[1] = pass;
            String updatedLine = String.join(",", fields);
            lines.set(selectedRow + 1, updatedLine);
    
            // escribir los datos actualizados en el archivo
            BufferedWriter bw = new BufferedWriter(new FileWriter("logindata.txt"));
            for (String line : lines) {
                bw.write(line);
                bw.newLine();
            }
            bw.close();
        } catch (IOException ex) {
            Logger.getLogger(people_info.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    En cuanto a las líneas vacías que aparecen en la JTable, esto podría ser causado por líneas vacías en el archivo txt. Para eliminarlas, puede modificar el código del botón “ver” de la siguiente manera:

    private void viewbtnActionPerformed(java.awt.event.ActionEvent evt) {
        try{
            BufferedReader br = new BufferedReader(new FileReader("logindata.txt"));
            String firstLine = br.readLine().trim();
            String[] columnsName = firstLine.split(",");
    
            DefaultTableModel model = (DefaultTableModel) datatable.getModel();
            model.setColumnIdentifiers(columnsName);
    
            String line;
            while ((line = br.readLine()) != null) {
                line = line.trim();
                if (line.isEmpty()) {
                    continue; // saltar las líneas vacías
                }
                String[] dataRow = line.split(",");
                model.addRow(dataRow);
            }
            br.close();
        }
        catch(Exception ep){
            Logger.getLogger(people_info.class.getName()).log(Level.SEVERE, null, ep);
        }
    }
    

    Este código modificado omite las líneas vacías al leer los datos del archivo txt.

Comments are closed.