Foro de elhacker.net

Programación => Java => Mensaje iniciado por: yesod en 26 Julio 2014, 03:18 am



Título: Sobre-escritura de archivos JAVA
Publicado por: yesod en 26 Julio 2014, 03:18 am
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
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.PrintWriter;
  8.  
  9. import javax.swing.JOptionPane;
  10.  
  11. public class EscribeFichero {
  12.    static String usuario, host, puerto, nombrebd, alias, clave;
  13.    //static String clave = new String(AñadirConexion.passwordField.getPassword());
  14.  
  15. public EscribeFichero() throws IOException {
  16. initComponents();
  17.    }
  18. private void initComponents() throws IOException {
  19. //Sacar la clave desde el JPasswordField
  20. clave = new String(AñadirConexion.passwordField.getPassword());
  21. //Recojo el texto introducido en las cajas de texto
  22. usuario=AñadirConexion.UsuarioField.getText();
  23. host=AñadirConexion.HostField.getText();
  24. puerto=AñadirConexion.PuertoField.getText();
  25. nombrebd=AñadirConexion.BDField.getText();
  26. alias=AñadirConexion.AliasField.getText();
  27. //Declaro e inicio el prodecimiento lectura/escritura del archivo en cuestión
  28. File fichero = new File ("C:\\prueba.txt");
  29. FileWriter fw = null;
  30.        PrintWriter pw = new PrintWriter(fichero);
  31.     if (!fichero.exists()){
  32.     try{
  33.     new FileWriter("C:\\prueba.txt");
  34.                pw.println(alias);
  35.                pw.println(usuario+":"+clave+":"+host+":"+puerto+":"+nombrebd);
  36.                JOptionPane.showMessageDialog(null, "Guardado correctamente");
  37.            } catch (Exception e) {
  38.                e.printStackTrace();
  39.            } finally {
  40.               try {
  41.               //Nuevamente aprovechamos el finally para asegurarnos que se cierra el fichero.
  42.               if (null != fichero)
  43.                  fw.close();
  44.               } catch (Exception e2) {
  45.                  e2.printStackTrace();
  46.               }
  47.            }
  48.     }else{
  49. //Busca todo el contenido entero de un texto y lo regresa en un String.
  50. StringBuilder contenido = new StringBuilder();
  51. try {
  52. BufferedReader br =  new BufferedReader(new FileReader(fichero));
  53. try {
  54. String linea;
  55. while ((linea = br.readLine()) != null){
  56. contenido.append(linea);
  57. System.out.println("Dentro del bucle");
  58. }
  59. if (null !=br){
  60. br.close();
  61. }
  62.  
  63. System.out.println(contenido);
  64. //Añado el contendo recogidos de los JTextField al StringBuilder "contenido"
  65. String field = alias+"\n"+usuario+":"+clave+":"+host+":"+puerto+":"+nombrebd;
  66. contenido.append(field);
  67.  
  68. System.out.println(contenido);
  69. //Cambia el contenido de un archivo de texto en su totalidad.. sobreescribiendo el texto existente
  70. BufferedWriter output = new BufferedWriter(new FileWriter("C:\\prueba.txt"));
  71. try {
  72. output.write(contenido.toString());
  73.    }finally {
  74.      output.close();
  75.    }
  76. }finally {
  77. br.close();
  78. }
  79. }catch (IOException ex){
  80. ex.printStackTrace();
  81. }
  82.  
  83. }
  84.    }
  85. public static void main(String[] args) throws IOException{
  86.     new EscribeFichero();
  87.    }
  88. }
  89.  

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?


Título: Re: Sobre-escritura de archivos JAVA
Publicado por: yesod en 27 Julio 2014, 18:38 pm
¿Enserio nadie sabe?


Título: Re: Sobre-escritura de archivos JAVA
Publicado por: ignorantev1.1 en 27 Julio 2014, 19:32 pm
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
  1. StringBuilder contenido = new StringBuilder();
  2. try {
  3. BufferedReader br =  new BufferedReader(new FileReader(fichero));
  4. try {
  5. String linea;
  6. while ((linea = br.readLine()) != null){
  7. contenido.append(linea);
  8. System.out.println("Dentro del bucle");
  9. }
  10. if (null !=br){
  11. br.close();
  12. }
  13.  
  14. /*System.out.println(contenido);
  15. //Añado el contendo recogidos de los JTextField al StringBuilder "contenido"
  16. String field = alias+"\n"+usuario+":"+clave+":"+host+":"+puerto+":"+nombrebd;
  17. contenido.append(field);
  18.  
  19. System.out.println(contenido);
  20. //Cambia el contenido de un archivo de texto en su totalidad.. sobreescribiendo el texto existente
  21. BufferedWriter output = new BufferedWriter(new FileWriter("C:\\prueba.txt"));
  22. try {
  23. output.write(contenido.toString());
  24.    }finally {
  25.      output.close();
  26.    }*/
  27. }
  28. catch (Exception ex){ // <-- No finally
  29. System.out.println(ex);
  30. br.close();
  31. }
  32. }
  33. catch (Exception ex){
  34. System.out.println(ex);
  35. }

Saludos.


Título: Re: Sobre-escritura de archivos JAVA
Publicado por: yesod en 27 Julio 2014, 20:52 pm
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


Título: Re: Sobre-escritura de archivos JAVA
Publicado por: ignorantev1.1 en 27 Julio 2014, 21:09 pm
¿Y si colocas la lectura afuera del bucle?

Código
  1. String linea;
  2. linea = br.readLine();
  3. while (linea != null){
  4.        contenido.append(linea);
  5.         linea = br.readLine();
  6. System.out.println("Dentro del bucle");
  7. }
  8. System.out.println("Fuera del bucle"); <--- ¿pasa por acá?
  9.  

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

Saludos.


Título: Re: Sobre-escritura de archivos JAVA
Publicado por: yesod en 27 Julio 2014, 21:29 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