Foros del Web » Programación para mayores de 30 ;) » Java »

Sobre-escritura de archivos JAVA

Estas en el tema de Sobre-escritura de archivos JAVA en el foro de Java en Foros del Web. Buenas tardes compañeros, llevo una semana con un problema que no consigo solucionar, explico y comento un poco para ver si alguien me puede echar ...
  #1 (permalink)  
Antiguo 30/07/2014, 10:38
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 9 meses
Puntos: 2
Sobre-escritura de archivos JAVA

Buenas tardes compañeros, llevo una semana con un problema que no consigo solucionar, explico y comento un poco para ver si alguien me puede echar un cable:

Código PHP:
//Botones de iteracción con el usuario        
        
btnGuardar = new JButton("Guardar");
        
btnGuardar.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent e) {
                try {
                    
EscribeFichero.main(null);
                } catch (
IOException e1) {
                    
// TODO Auto-generated catch block
                    
e1.printStackTrace();
                }
            }
        });
        
btnGuardar.setBounds(10879123);
        
getContentPane().add(btnGuardar);
        
        
btnConectar = new JButton("Conectar");
        
btnConectar.addActionListener(new ActionListener() {
                public 
void actionPerformed(ActionEvent e) {
                    try {
                        
objConex.conectar();
                        
//Compruebo si la conexión esta activa
                        
if (!ConexionDB.getConex().isClosed()){
                            
MenuGUI.EstadoConx.setText("¡Conectado!");
                            
MenuGUI.EstadoConx.setForeground(Color.GREEN);
                        }else{
                            
MenuGUI.EstadoConx.setText("Error al conectar");
                        }
                    } catch (
SQLException e1) {
                        
JOptionPane.showInputDialog(e1"No se pudo  establecer conexión");
                    }
                }
        });
        
btnConectar.setBounds(101379123);
        
getContentPane().add(btnConectar);
        
        
btnReset = new JButton("Resetear Datos");
        
btnReset.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent arg0) {
                
            }
        });
        
btnReset.setBounds(11113712823);
        
getContentPane().add(btnReset);
        
        
btnSalir = new JButton("Salir");
        
btnSalir.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent e) {
                
//Cierro la ventana limpiando el objeto en la memoria
                
dispose();
            }
        });
        
btnSalir.setBounds(2871379123);
        
getContentPane().add(btnSalir);
    }
    
    public 
void windowActivated(WindowEvent e){
        
setEnabled(true);
    }

    public static 
void main(String[] args) {
        
EventQueue.invokeLater(new Runnable() {
            public 
void run() {
                try {
                    
AñadirConexion frame = new AñadirConexion();
                    
frame.setVisible(true);
                } catch (
Exception e) {
                    
e.printStackTrace();
                }
            }
        });
    }

Explico: En esta clase tengo hecho un JFrame, que recoge los datos recogidos en los cuadros de texto y los envia a diferentes clases para trabajar, pero, cuando yo recojo los datos para proceder a guardarlos en un archivo tengo esto:

Código PHP:
import java.io.*;

import javax.swing.JOptionPane;

public class 
EscribeFichero {
    static 
String usuariohostpuertonombrebdaliasclave;
    
//static String clave = new String(AñadirConexion.passwordField.getPassword());
    
    
public EscribeFichero() throws IOException {
        
initComponents();
    }
    @
SuppressWarnings("resource")
    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");
        
System.out.println(fichero);
        
PrintWriter pw = new PrintWriter(fichero);
        
FileWriter fw null;
        
//Compruebo si el fichero en cuestión existe
        
if (!fichero.exists()){
            try{
                
//Instancio la escritura del archivo en cuestión y le imprimo en su interior las variables
                
new FileWriter(fichero);
                
pw.println(alias+":"+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 null;
                    
//Comparo que el String al tener la ruta del archivo entre en el bucle para empezar su lectura linea a linea
                    
while ((linea br.readLine()) != null){
                        
contenido.append(linea); //Añado el contenido de linea (contenido del archivo) al String "contenido"
                        
System.out.println("Dentro del bucle");
                    }
                    
System.out.println("Fuera 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+":"+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(fichero));
                    try {
                        
output.write(contenido.toString());
                        }
finally {
                          
output.close();
                        }
                }catch (
Exception ex){
                    
System.out.println(ex);
                    
br.close();
                    }
            }catch (
IOException ex){
                
ex.printStackTrace();
                }
        }
    }
    public static 
void main(String[] argsthrows IOException{
        new 
EscribeFichero();
    }

Lo que trato primero, y hasta ahí funciona bien, es la recogida de texto la clase "Añadir Conexión".
Luego compruebo que el archivo en cuestión donde voy guardar tales datos exista y procedo a su guardado en tal archivo.

BIEN, hasta ahí todo funciona correctamente, el problema me viene en esta parte del código:

Código PHP:
//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 null;
                    
//Comparo que el String al tener la ruta del archivo entre en el bucle para empezar su lectura linea a linea
                    
while ((linea br.readLine()) != null){
                        
contenido.append(linea); //Añado el contenido de linea (contenido del archivo) al String "contenido"
                        
System.out.println("Dentro del bucle");
                    }
                    
System.out.println("Fuera 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+":"+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(fichero));
                    try {
                        
output.write(contenido.toString());
                        }
finally {
                          
output.close();
                        }
                }catch (
Exception ex){
                    
System.out.println(ex);
                    
br.close();
                    }
            }catch (
IOException ex){
                
ex.printStackTrace();
                }
        } 
Que es la que trata por medio de una lectura de archivo (cosa que no funciona) leer el contenido y guardarlo en un string, luego una vez hecho esto, guardo el contenido recogido de las TextField, en el StringBuild junto a lo anterior y luego procedo a guardarlo en el archivo. Pues bien, el problema viene a la hora de la lectura, que por alguna razón, no me hace lectura, me da error NullPointerException y no se entiendo el motivo, porque se supone que si lo escribe, es porque esta la ruta del archivo bien puesta y debería, por tanto, también realizar la lectura.

¿Como puedo solucionarlo?
  #2 (permalink)  
Antiguo 02/08/2014, 02:29
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Sobre-escritura de archivos JAVA

¿Estás seguro de que el nullpointer te lo da en esta línea?

BufferedReader br = new BufferedReader(new FileReader(fichero));
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: clase, jframe, objeto, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:06.