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(10, 87, 91, 23);
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(10, 137, 91, 23);
getContentPane().add(btnConectar);
btnReset = new JButton("Resetear Datos");
btnReset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
btnReset.setBounds(111, 137, 128, 23);
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(287, 137, 91, 23);
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 usuario, host, puerto, nombrebd, alias, clave;
//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[] args) throws 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?