leer archivos (DatainputStream)

Blanca
11 de Julio del 2004
Enviado por Blanca el día 11 de julio de 2004
hola antes que nada quiero agradecer inmensamente tu ayuda tu ejemplo me ha hecho aclararme ciertas cosas pero creo que lo que necesito es mmm....bueno entiendo que en tue ejemplo es de acceso aleatorio mi duda es si puedo implementar un RandomAccessFile a mi programa:::::::: esto es lo que llevo hasta ahora.... en el boton lista del primer frame debe mostrarme los datos ya guardados en el archivo....trate de implementar algo como el ejemplo que me diste y cuando compilo el programa ya no me manda ningun error pero a ejecutarlo me dice

Exception in thread "main" java.lang.NullPointerException
at ProyectoFinal.<init>(ProyectoFinal.java:109)
at ProyectoFinal.main(ProyectoFinal.java:32)
Presione cualquier tecla para continuar . . .


este es mi ejercicio

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;


public class ProyectoFinal extends JFrame implements ActionListener
{

String datos;
String name;
JFrame Frame1,Frame2,Frame3;
JLabel Nombre;
JLabel Edad;
JLabel Hombre;
JLabel Mujer;
JLabel Pais;
DataOutputStream output;
JPanel p1,p2,p3;
JTextField nom,edad,pais;
JButton Enviar,Regresar,Lista,Exit,Borrar;
ButtonGroup Genero;
JRadioButton Masculino,Femenino;
JList Paises,Registro;
DefaultListModel Lista1;
DefaultListModel Lista2;
JScrollPane Scrol,Scrol2;
JTextArea ta_visor_;
RandomAccessFile lectura;
public static void main(String args[])
{
ProyectoFinal FrameFile =new ProyectoFinal();
}

private ProyectoFinal()
{

JFrame.setDefaultLookAndFeelDecorated(true);
Frame1 =new JFrame("Ventana Principal");
Frame2=new JFrame("Registro");
Nombre =new JLabel("Nombre :");
Edad=new JLabel("Edad");
Hombre =new JLabel("M");
Mujer =new JLabel("F");
Pais=new JLabel("Pais :");
p1=new JPanel();
p2=new JPanel();
Lista =new JButton("Frame registro");
Enviar= new JButton("Guardar");
Exit=new JButton("Salir");
Regresar=new JButton("Regresar");
Borrar =new JButton("Borrar");
JTextArea ta_visor_ = new JTextArea(20 , 20);

Enviar.addActionListener(this);
Lista.addActionListener(this);
Exit.addActionListener(this);
Regresar.addActionListener(this);
Borrar.addActionListener(this);

Genero =new ButtonGroup();
Masculino=new JRadioButton();
Femenino=new JRadioButton();
nom=new JTextField(15);
edad=new JTextField(3);
Lista1 =new DefaultListModel();
Lista2=new DefaultListModel();

Lista1.addElement("España");
Lista1.addElement("Mexico");
Lista1.addElement("Brazil");
Lista1.addElement("U.S.A");
Paises=new JList(Lista1);
Paises.setSelectedIndex(0);
Paises.setVisibleRowCount(3);

JScrollPane Scrol=new JScrollPane();
Scrol.getViewport().setView(Paises);


Registro=new JList(Lista2);
Registro.setSelectedIndex(10);
Registro.setVisibleRowCount(5);
JScrollPane Scrol2=new JScrollPane();
Scrol2.getViewport().setView(Registro);


Genero.add(Masculino);
Genero.add(Femenino);



p1.add(Nombre);
p1.add(nom);
p1.add(Edad);
p1.add(edad);
p1.add(Hombre);
p1.add(Masculino);
p1.add(Mujer);
p1.add(Femenino);
p1.add(Pais);
p1.add(Scrol);
p1.add(Lista);
p1.add(Enviar);
p1.add(Exit);
p2.add(Scrol2) ;
p2.add(Borrar);
p2.add(Regresar);
p3.add(ta_visor_);
p3.add(Borrar);
p3.add(Regresar);


Frame1.setSize(new Dimension(400,200));
Frame2.setSize(new Dimension(400,200));

Frame1.getContentPane().add(p1);
Frame2.getContentPane().add(p2);
Frame3.getContentPane().add(p3);
Frame1.setVisible(true);


Frame1.addWindowListener(new WindowAdapter()
{
public void WindowClosing(WindowEvent e)
{
System.exit(0);
}
});
Frame2.addWindowListener(new WindowAdapter()
{
public void WindowClosing(WindowEvent e)
{
System.exit(0);
}
});

abrir();
//abrirDatos();
leer();

}//cierra funcion frame file


//funcion que crea un archivo

public void abrir()
{

try
{
output=new DataOutputStream(new FileOutputStream("c:\Datos",true));
}

catch(IOException e)
{
System.err.println("No se abrio bien el archivon" + e.toString());
System.exit(1);
}
}

//funcion para abrir el archivo datos
//public void abrirDatos()
// {
//
// try
// {
// input=new DataInputStream( new FileInputStream("c:\Datos"));
// }
// catch(IOException e)
// {
// System.err.println("no se pudo leer bienn"+ e.toString());
// System.exit(1);
// }
//}

//funcion leer
public void leer(){
try{
RandomAccessFile lectura = new RandomAccessFile("c:\Datos" , "rw");;
byte [] buffer = new byte[(int)(lectura.length())];
lectura.read(buffer);
lectura.close();
ta_visor_.append(new String (buffer));
} catch(IOException e){}
}

//funcion agregar
public void addRecord()
{

try
{
output.writeUTF(datos);
}

catch(IOException e)
{
System.err.println("Error al escribir el archivon" + e.toString());
System.exit(1);
}

nom.setText(" ");
edad.setText(" ");
}
//funcion reescribir
public void reescribir()
{

int i;
for(i=0;i<=Lista2.getSize()-1;i++)
{
datos= (Lista2.elementAt(i)).toString();
addRecord();
}
}

//funcion limpiar
public void cleanup()
{
try
{
output.flush();
output.close();
}

catch(IOException e)
{
System.err.println("No se cerró bien el archivon" + e.toString());
System.exit(1);
}
}




//funcion que recoge todos los datos y eventos de los frame

public void actionPerformed(ActionEvent e)

{

datos=nom.getText()+ "**" +edad.getText();
name = Lista1.getElementAt(
Paises.getSelectedIndex()).toString();


if (Masculino.isSelected())
{
datos=datos + "**" +"Masculino"+ "**" + name;
}
else if (Femenino.isSelected())
{
datos=datos+ "**" +"Femenino"+ "**" + name;
}


if (e.getSource()==Lista)
{
leer();
Frame3.setVisible(true);

}


if(e.getSource()==Regresar)
{
Frame2.setVisible(false);
nom.setText(" ");
edad.setText(" ");
}


if (e.getSource()==Exit)
{
cleanup();
hide();
dispose();
System.exit(0);
}



if (e.getSource()==Enviar)
{

Lista2.addElement(datos) ;
addRecord();
}



if (e.getSource()==Borrar)
{
Lista2.removeElementAt(Registro.getSelectedIndex());
Registro.setSelectedIndex((Lista2.getSize()));
cleanup();
abrir();
reescribir();
}
}//cierra la funcion que recoge todos los datos y eventos de los frame
}// cierra public class FrameFile extends JFrame implements ActionListener





Gru?
11 de Julio del 2004
Hola Blanca, Mire tu código y tenias un par de errores, todos ellos de apuntador nulo, estas fueron las variables que no inicializaste:
p3
Frame3
ta_visor_
Bueno, realmente si se inicializo ta_visor_ pero como
Variable local en la constructora, ya que pusiste la
Sentencia JTextArea ta_visor_ = ..., el JTextArea sobra.
Tambien debes dimensionar el Frame3 para que lo tengas en cuenta.
Luego de corregir esos errores, le hize un par de pruebas a tu aplicacion y guarda bien los datos.
Tambien te recomiendo añadirle a cada registro un salto de línea o algo así para que tu datos salgan listados.
Suerte.