problemas para escribir archivo

Claudio
09 de Junio del 2006
cree cuatro clases para escribir un archivo, la dos primeras son como ocupar LinkedList, la tercera es el modelo de datos y la cuarta la GUI, el problema que cuando a la lista le trato de implementar el patron Singleton no me resulta, cuando ocupo el metodo escribir_datos se traba y me llena el archivo siendo que solo le puse uno solo, cuando trato de buscar un dato me sale el mensaje de excepcion, alguien me podria ayudar
las clases son


public class ModeloDatoGeneral {
String Parroquia;
String Diocesis;
String parroco;

public ModeloDatoGeneral(String parroquia, String diocesis, String parroco) {
super();
Parroquia = parroquia;
Diocesis = diocesis;
this.parroco = parroco;
}

public String getDiocesis() {
return Diocesis;
}

public void setDiocesis(String diocesis) {
Diocesis = diocesis;
}

public String getParroco() {
return parroco;
}

public void setParroco(String parroco) {
this.parroco = parroco;
}

public String getParroquia() {
return Parroquia;
}

public void setParroquia(String parroquia) {
Parroquia = parroquia;
}

}


public class Nodo {
ModeloDatoGeneral modelo;

Nodo(ModeloDatoGeneral modelo) {

this.modelo = modelo;
}
ModeloDatoGeneral modelo(){
return modelo;
}

}


import java.io.*;

import javax.swing.JOptionPane;

public class LibroDato {
Nodo primero = null;
Nodo nuevo;

//private static LibroDato instancia;

/*public LibroDato() {

}

public static LibroDato getInstancia(){
if(instancia == null){
instancia = new LibroDato();
}
return instancia;
}
*/
void ingresar_datos(ModeloDatoGeneral modelo){
nuevo = new Nodo(modelo);
if(primero == null){
nuevo = primero;
}
}

public void escribir_datos() {

Nodo aux = primero;
try{
FileWriter file = new FileWriter("Datos Generales.txt");
BufferedWriter out = new BufferedWriter(file);
PrintWriter salida = new PrintWriter(out);

while(aux !=null){
salida.println(aux.modelo().getParroquia());
salida.println(aux.modelo().getDiocesis());
salida.println(aux.modelo().getParroco());
}
salida.close();//se cierra el archivo
}catch(IOException e){
System.out.println("NO SE PUDO ESCRIBIR EL ARCHIVO");
}
}

void lee_datos() {

ModeloDatoGeneral mod;
String linea = new String();
String parroquia, diocesis, parroco;
try {
FileReader red = new FileReader ("Datos Generales.txt");
BufferedReader entrada = new BufferedReader (red);
String s;
boolean feof = false;//fin de archivo
while (!feof) {//mientras no sea el fin de archivo
parroquia = entrada.readLine();//lee el nombre
if (parroquia == null) {//si el nombre es vqacio no sigue // leyendo
feof = true;
break;
}
diocesis = entrada.readLine();
parroco = entrada.readLine();
mod = new ModeloDatoGeneral (parroquia,diocesis,parroco);
ingresar_datos(mod);
}
entrada.close();
}catch (IOException e ) {
System.out.println ("NO SE PUDO LEER EL ARCHIVO O EL ARCHIVO ES INEXISTENTE");
}
}

Nodo buscar_datos() {
if(primero != null){
return primero;

}
else{

return null;
}
}
}


public class DatoGeneral extends JFrame implements ActionListener{
ModeloDatoGeneral modelo;
//LibroDato libro = LibroDato.getInstancia();
LibroDato libro = new LibroDato();
JLabel nombreparroquia = new JLabel("Parroquia");
JLabel nombrediocesis= new JLabel("Diocesis");
JLabel nombreparroco = new JLabel("Párroco");
JTextField tnombreparroquia = new JTextField();
JTextField tnombrediocesis= new JTextField();
JTextField tnombreparroco = new JTextField();
JButton ingresoparroquia = new JButton("GUARDAR");
JButton buscaparroquia = new JButton("MOSTRAR");
JPanel ingresoDatos = new JPanel();

public DatoGeneral(){
libro.lee_datos();
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
//libro.escribir_datos();
System.exit(0);
}
});

ingresoDatos.setLayout(null);
nombreparroquia.setBounds(20,20,70,20);
nombrediocesis.setBounds(20,60,70,20);
nombreparroco.setBounds(20,100,70,20);
tnombreparroquia.setBounds(100,20,200,20);
tnombrediocesis.setBounds(100,60,200,20);
tnombreparroco.setBounds(100,100,200,20);
ingresoparroquia.addActionListener(this);
ingresoparroquia.setBounds(50,130,100,20);
buscaparroquia.addActionListener(this);
buscaparroquia.setBounds(180,130,100,20);
ingresoDatos.add(nombreparroquia);
ingresoDatos.add(nombrediocesis);
ingresoDatos.add(nombreparroco);
ingresoDatos.add(tnombreparroquia);
ingresoDatos.add(tnombrediocesis);
ingresoDatos.add(tnombreparroco);
ingresoDatos.add(ingresoparroquia);
ingresoDatos.add(buscaparroquia);

setContentPane(ingresoDatos);
this.setBounds(100,100,350,200);

}

public static void main(String[] args){
JFrame parroq = new DatoGeneral();

parroq.setVisible(true);
}

public void actionPerformed(ActionEvent e){
Nodo busqueda;

Object s = e.getSource();

if(s == ingresoparroquia){
modelo = new ModeloDatoGeneral(tnombreparroquia.getText().toUpperCase(),tnombrediocesis.getText().toUpperCase(),
tnombreparroco.getText().toUpperCase());
libro.ingresar_datos(modelo);
tnombreparroquia.setText("");
tnombrediocesis.setText("");
tnombreparroco.setText("");
libro.escribir_datos();
}
if(s == buscaparroquia){
try{
busqueda = libro.buscar_datos();
tnombreparroquia.setText(busqueda.modelo().getParroquia());
tnombrediocesis.setText(busqueda.modelo().getDiocesis());
tnombreparroco.setText(busqueda.modelo().getParroco());
}
catch (NullPointerException e1){
JOptionPane.showMessageDialog(null,"Debe Ingresar los Datos","Error",JOptionPane.ERROR_MESSAGE);
}

}

}
}



gracias