Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: China en 07 de Octubre 2018, 03:20
-
Buenas Noches tengo una problema con la lectura de archivo, tengo un metodo llamado lectura el cual estoy un archivo que tiene como separador "|", pero los datos los guardo mediante una matriz
public void Lectura() {
String Linea;
try {
FileReader fr = new FileReader("C:\\Proyecto\\Banco.txt");
BufferedReader br = new BufferedReader(fr);
String matriz[][] = new String[lista.size()][5];
int numlineas = 0;
while (((Linea = br.readLine()) != null)) {
String a[] = Linea.split("|");
for (int i = 0; i < lista.size(); i++) {
matriz[numlineas][i] = a[i];
}
Linea = br.readLine();
br.close();
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
Este metodo se lo paso a un evento tipo botón en si lo que quiero es que a momento de hacer mi operacion se modifique tanto en la tabla y el archivo, en la tabla si se modifica pero mi archivo no se modifica el saldo, Espero me puedan ayudar
-
Si quieres modificar el archivo, tendrás que usar las clases FileWriter y BufferedWriter de forma similar a como has usado los FileReader y BufferedReader.
Tendrás que construir un String con TODOS los datos (no solo los cambiados) de la matriz, poniendo el separador "|" ahí donde deba ir y también los caracteres para crear saltos de línea (puedes usar el caracter especial "\n")
Luego le pasas ese String al metodo writer() del objeto BufferedWriter y lo escribirá en el archivo de texto, eliminando lo que hubiera previamente.
-
Hice esto pero lo que hace es agrega una linea nuevapero lo que quiero es que me modifique la misma linea pero no se como pasarlos, listaes un arraylist que tiene una clase llamada banco esa clase contiene get y set este es el codigo que tengo
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(archivo, true));
Banco b = new Banco(ncuenta,tcuenta,cliente,banco,saldo);
for (int i = 0; i < lista.size(); i++) {
if(jTextField1.getText().equals(lista.get(i).getNcuenta())){
lista.get(i).setTcuenta(jComboBox1.getSelectedItem().toString());
lista.get(i).setCliente(jTextField2.getText());
lista.get(i).setBanco(jComboBox2.getSelectedItem().toString());
lista.get(i).setSaldo(jTextField3.getText());
bw.write(b.toString());
bw.newLine();
}
}
// para limpiar lo que tiene los jtexfield entre otros
jTextField1.setText("");
jComboBox1.setSelectedItem("");
jTextField2.setText("");
jComboBox2.setSelectedItem("");
jTextField3.setText("");
//Este es para que lo muestre en la tabla
String matriz [][]= new String [lista.size()][5];
for(int i = 0; i < lista.size(); i++){
matriz[i][0] = lista.get(i).getNcuenta();
matriz[i][1] = lista.get(i).getTcuenta();
matriz[i][2] = lista.get(i).getCliente();
matriz[i][3] = lista.get(i).getBanco();
matriz[i][4] = lista.get(i).getSaldo();
} jTable1.setModel(new javax.swing.table.DefaultTableModel(
matriz,
new String [] {
"No.Cuenta", "Tipo de cuenta", "Cliente", "Banco", "Saldo"
}
));
bw.close();
} catch (IOException ex) {
Logger.getLogger(FormularioBanco.class.getName()).log(Level.SEVERE, null, ex);
}
-
Es importante familiarizarse con la documentación oficial de Oracle.
Se te añade la linea porque al objeto FileWriter le estás pasando true como parametro.
bw = new BufferedWriter(new FileWriter(archivo, true));
Si miras la docu oficial (https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean)) verás que al pasarle true, le estamos dando orden de que los próximos datos a escribir se añadan al final del documento.
Si no queremos añadir nuevas líneas, como será en este caso, debemos indicarle false (o no indicar nada)