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

Título: Java escritura archivos FileWriter BufferedWriter lectura FileReader BufferedRea
Publicado 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

Código: [Seleccionar]
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
Título: Re:Lectura de archivos
Publicado por: Kabuto en 07 de Octubre 2018, 22:32
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.
Título: Re:Lectura de archivos
Publicado por: China en 13 de Octubre 2018, 20:16
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
Código: [Seleccionar]

                 
                 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);
       }
       
Título: Re:Lectura de archivos
Publicado por: Kabuto en 13 de Octubre 2018, 21:22
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.
Citar
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)