leer archivos (DatainputStream)

Blanca
10 de Julio del 2008
hola tengo que hacer un programa que guarde ciertos datos en un archivo y que a su vez se muestren el una area de texto.....el problema es que no se como leer los datos que ya estan guardados en mi archivo y mostrarlos en el area de texto una vez reiniciado el programa





carlos
10 de Julio del 2008
Yo estaba en lo mismo(Leer y Guardar registros en un archivo con JAva) y encontré un utilitario muy bueno, rápido, fácil de usar y extensible con el código fuente y bien documentado en http://carrypotter.blogspot.com/2008/07/utilitario-para-formateo-de-datos.html

Saludos y suerte!!

Carlitos=)

Gru?
10 de Julio del 2008
Todo depende del tipo de estructura que necesites, pues bien, hay manejo secuencial y relativo, y a su vez estas categorias se vuelven mas específicas.
Queda en tus manos consultar cuales son las clases que necesitas para hacer lo que buscas.

Te construí un ejemplo muy primitivo que puede ser parecido a lo que necesitas ojala te sirva de algo:

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

class VisorArchivo extends JFrame{

private JTextArea ta_visor_ = new JTextArea(20 , 20);

public VisorArchivo() {
getContentPane().add(ta_visor_);
leer();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
guardar();
System.exit(0);
}
});
pack();
show();
}

public void leer(){
try{
RandomAccessFile lectura = new RandomAccessFile("archivo.prueba" , "rw");;
byte [] buffer = new byte[(int)(lectura.length())];
lectura.read(buffer);
lectura.close();
ta_visor_.append(new String (buffer));
} catch(IOException e){}
}

public void guardar(){
try{
RandomAccessFile registro = new RandomAccessFile("archivo.prueba" , "rw");
registro.writeBytes(ta_visor_.getText());
} catch(IOException ioe){}
}

public static void main(String args[]) {
new VisorArchivo();
}
}

Blanca
10 de Julio del 2008
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?
10 de Julio del 2008
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.