Sobre-escritura de archivos JAVA

Iniciado por yesod, 26 Julio 2014, 03:18 AM

0 Miembros y 1 Visitante están viendo este tema.

yesod

Buenas noches compañeros, estoy intentando añadir mas datos a un archivo ya existente. Os pongo el código y os explico:

Código (java) [Seleccionar]

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.JOptionPane;

public class EscribeFichero {
   static String usuario, host, puerto, nombrebd, alias, clave;
   //static String clave = new String(AñadirConexion.passwordField.getPassword());
   
public EscribeFichero() throws IOException {
initComponents();
   }
private void initComponents() throws IOException {
//Sacar la clave desde el JPasswordField
clave = new String(AñadirConexion.passwordField.getPassword());
//Recojo el texto introducido en las cajas de texto
usuario=AñadirConexion.UsuarioField.getText();
host=AñadirConexion.HostField.getText();
puerto=AñadirConexion.PuertoField.getText();
nombrebd=AñadirConexion.BDField.getText();
alias=AñadirConexion.AliasField.getText();
//Declaro e inicio el prodecimiento lectura/escritura del archivo en cuestión
File fichero = new File ("C:\\prueba.txt");
FileWriter fw = null;
       PrintWriter pw = new PrintWriter(fichero);
    if (!fichero.exists()){
    try{
    new FileWriter("C:\\prueba.txt");
               pw.println(alias);
               pw.println(usuario+":"+clave+":"+host+":"+puerto+":"+nombrebd);
               JOptionPane.showMessageDialog(null, "Guardado correctamente");
           } catch (Exception e) {
               e.printStackTrace();
           } finally {
              try {
              //Nuevamente aprovechamos el finally para asegurarnos que se cierra el fichero.
              if (null != fichero)
                 fw.close();
              } catch (Exception e2) {
                 e2.printStackTrace();
              }
           }
    }else{
//Busca todo el contenido entero de un texto y lo regresa en un String.
StringBuilder contenido = new StringBuilder();
try {
BufferedReader br =  new BufferedReader(new FileReader(fichero));
try {
String linea;
while ((linea = br.readLine()) != null){
contenido.append(linea);
System.out.println("Dentro del bucle");
}
if (null !=br){
br.close();
}

System.out.println(contenido);
//Añado el contendo recogidos de los JTextField al StringBuilder "contenido"
String field = alias+"\n"+usuario+":"+clave+":"+host+":"+puerto+":"+nombrebd;
contenido.append(field);

System.out.println(contenido);
//Cambia el contenido de un archivo de texto en su totalidad.. sobreescribiendo el texto existente
BufferedWriter output = new BufferedWriter(new FileWriter("C:\\prueba.txt"));
try {
output.write(contenido.toString());
   }finally {
     output.close();
   }
}finally {
br.close();
}
}catch (IOException ex){
ex.printStackTrace();
}
   
}
   }
public static void main(String[] args) throws IOException{
    new EscribeFichero();
   }
}


Justo en ese bucle, en el que uso para hacer la lectura del archivo, no entra...¿alguna idea de porque, esta bien escrito por lo menos?

He estado mirando ese bucle y, el problema que me da es que linea es null, por lo tanto no entra, pero he estado mirando las rutas del archivo en cuestión y estan correctas, por el simple hecho que hace la escritura, y comprueba que el archivo existe, pero no hace la lectura y no se porque...

¿Alguna idea?

yesod


ignorantev1.1

Ponlo en etiqueta GeShi a tu código para que sea más legible.

Si imprimes las excepciones (en caso de), seguramente te va a decir dónde está tu error:

Código (java) [Seleccionar]
StringBuilder contenido = new StringBuilder();
try {
BufferedReader br =  new BufferedReader(new FileReader(fichero));
try {
String linea;
while ((linea = br.readLine()) != null){
contenido.append(linea);
System.out.println("Dentro del bucle");
}
if (null !=br){
br.close();
}

/*System.out.println(contenido);
//Añado el contendo recogidos de los JTextField al StringBuilder "contenido"
String field = alias+"\n"+usuario+":"+clave+":"+host+":"+puerto+":"+nombrebd;
contenido.append(field);

System.out.println(contenido);
//Cambia el contenido de un archivo de texto en su totalidad.. sobreescribiendo el texto existente
BufferedWriter output = new BufferedWriter(new FileWriter("C:\\prueba.txt"));
try {
output.write(contenido.toString());
    }finally {
      output.close();
    }*/
}
catch (Exception ex){ // <-- No finally
System.out.println(ex);
br.close();
}
}
catch (Exception ex){
System.out.println(ex);
}


Saludos.

yesod

#3
El problema es que, por alguna razón no me lee el fichero...lo escribe correctamente pero no es capaz de leerlo

Llevo ya unos días investigando y no consigo dar con el fallo...hice debug y, el problema es que la variable br o linea como tal, se queda en null, no recoge el valor del buffer al leer la ruta del archivo.

PD: Ya corregí la parte del finally y le puse catch :D

ignorantev1.1

¿Y si colocas la lectura afuera del bucle?

Código (java) [Seleccionar]

String linea;
linea = br.readLine();
while (linea != null){
        contenido.append(linea);
         linea = br.readLine();
System.out.println("Dentro del bucle");
}
System.out.println("Fuera del bucle"); <--- ¿pasa por acá?


Repito, edita tu post y activa las etiquetas, les facilitas el entendimiento a las personas que quieren ayudarte.

Saludos.

yesod

#5
Cita de: ignorantev1.1 en 27 Julio 2014, 21:09 PM
¿Y si colocas la lectura afuera del bucle?


Es que no se como ponerlo como dices, no se que tipo de etiqueta hay que poner...o a que botón darle para mejorar la lectura.

Citar
¿Y si colocas la lectura afuera del bucle?

Código

   String linea;
   linea = br.readLine();
   while (linea != null){
          contenido.append(linea);
           linea = br.readLine();
   System.out.println("Dentro del bucle");
   }
   System.out.println("Fuera del bucle"); <--- ¿pasa por acá?
   

Esto fue lo primero que intenté hacer tras ver que no funcionaba y no me hace ni caso...

Citar
System.out.println("Fuera del bucle"); <--- ¿pasa por acá?

Por ahí si pasa...

PD: Ya he dado con el etiquetado correcto :D Gracias