Estoy intentando reescribir un archivo txt utilizando JTable en Java, pero borra la primera línea cada vez.
Estoy tratando de reescribir “dat” en mi archivo de texto con el siguiente código.
private void updateActionPerformed(java.awt.event.ActionEvent evt) {
try{
File file = new File ("logindata.txt");
if(!file.exists()){
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < datatable.getRowCount(); i++){
for(int j = 0; j< datatable.getColumnCount(); j++){
bw.write(datatable.getModel().getValueAt(i,j)+",");
}
bw.write("\n");
}
bw.close();
fw.close();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"Error, please retry");
}
}
Aquí está la función de modificación en la GUI.
private void modifybtnActionPerformed(java.awt.event.ActionEvent evt) {
int i = datatable.getSelectedRow();
DefaultTableModel model = (DefaultTableModel)datatable.getModel();
if (i >= 0)
{
model.setValueAt(newusername.getText(), i, 0);
model.setValueAt(newpass.getText(), i, 1);
}
else
{
JOptionPane.showMessageDialog(null, "Error");
}
}
Código para ver el archivo de texto en la tabla.
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);
model.setRowCount(0);
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);
}
}
Cuando lo ejecuto, modifica el contenido en el archivo de texto, pero siempre elimina la primera línea. ¿Cómo puedo evitar esto?
davy.ai
El problema parece estar en la forma en que se actualiza el archivo
logindata.txt
. Cuando se llama al métodoupdateActionPerformed
, sobrescribe todo el contenido del archivo con los datos actualizados de ladatatable
. Esto significa que la primera línea, que contiene la información del encabezado, también se sobrescribe y se pierde.Para evitar que esto suceda, una solución sería leer primero el contenido del archivo original
logindata.txt
en ladatatable
, actualizar los valores requeridos en ladatatable
utilizando el métodomodifybtnActionPerformed
, y luego escribir toda ladatatable
de nuevo en el archivologindata.txt
.Aquí está una versión actualizada del método
updateActionPerformed
que implementa este enfoque:Este método actualizado primero lee la información del encabezado y los datos del archivo original
logindata.txt
en ladatatable
. Luego, se actualizan los valores requeridos en ladatatable
. Finalmente, se escribe toda ladatatable
de nuevo en el archivo, incluyendo la información de encabezado original.Con este enfoque modificado, la información del encabezado ya no debería perderse al actualizar el contenido del archivo
logindata.txt
.