elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Sobre-escritura de archivos JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sobre-escritura de archivos JAVA  (Leído 3,036 veces)
yesod

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Sobre-escritura de archivos JAVA
« 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?


« Última modificación: 27 Julio 2014, 21:31 pm por yesod » En línea

yesod

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Sobre-escritura de archivos JAVA
« Respuesta #1 en: 27 Julio 2014, 18:38 pm »

¿Enserio nadie sabe?


En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Sobre-escritura de archivos JAVA
« Respuesta #2 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.
En línea

yesod

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Sobre-escritura de archivos JAVA
« Respuesta #3 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
« Última modificación: 27 Julio 2014, 21:39 pm por yesod » En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Sobre-escritura de archivos JAVA
« Respuesta #4 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.
En línea

yesod

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Sobre-escritura de archivos JAVA
« Respuesta #5 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
« Última modificación: 27 Julio 2014, 21:32 pm por yesod » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con escritura de archivos
Programación C/C++
drakolive 4 3,154 Último mensaje 2 Junio 2010, 22:03 pm
por Littlehorse
Escritura con archivos JAVA
Java
rommel89 1 2,851 Último mensaje 19 Julio 2012, 07:05 am
por rommel89
[Ayuda] Lectura y escritura de archivos.
Java
ignorantev1.1 3 2,867 Último mensaje 30 Marzo 2013, 18:03 pm
por ignorantev1.1
escritura de multiples archivos en python
Scripting
eolh652 3 2,636 Último mensaje 4 Octubre 2013, 14:06 pm
por Softrix18
Ayuda por favor (Con escritura de archivos en C++)
Programación C/C++
guirudj007 2 2,520 Último mensaje 21 Julio 2016, 00:29 am
por guirudj007
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines