Download MANEJO DE ARCHIVOS EN JAVA LEER Y ESCRIBIR OBJETOS

Document related concepts
no text concepts found
Transcript
INGENIERIA DE SISTEMAS
ESTRUCTURAS DE DATOS (Ficheros)
MANEJO DE ARCHIVOS EN JAVA
LEER Y ESCRIBIR OBJETOS EN ARCHIVOS
Un archivo es un grupo de datos estructurados que son almacenados en algún medio de
almacenamiento y pueden ser usados por las aplicaciones (programas). La forma en que una
computadora organiza, da nombre, almacena y manipula los archivos se denomina “sistema de
archivos” y suele depender del Sistema Operativo y del medio de almacenamiento (disco duro,
disco externo, memorias USB, etc)
La característica principal de los archivos es el Nombre y su extensión,
El nombre es la identificación del archivo y su extensión indica el tipo de archivo al que
corresponde, la extensión generalmente es de tres caracteres, por ejemplo:
Nombre.doc  es que un archivo tipo documento (de Microsoft Word)
Nombre.mp3 es un archivo de música
Nombre.xls  es un archivo de hoja de cálculo (Microsoft Excel)
Nombre.txt  es un archivo de texto
Serialización de un Objeto  Implementar serializable
Para que un programa pueda convertir un objeto en un montón de bytes y pueda luego
recuperarlo, el objeto necesita ser serializable. Para que un objeto sea serializable basta que
implemente la interfaz Serializable, como la interfaz Serializable no tiene métodos, es muy sencillo
implementarla, basta con un implements Serializable.
Las clases FIleInputStream y FileOutputStream
Gran parte de la entrada y salida de los programas se realiza basándose en archivos y para ello
java.io aporta dos clases. Una para ficheros de entrada, FileInputStream, y otra para ficheros de
salida, FileOutputStream. La diferencia entre ficheros de entrada y de salida es fundamental,
pues situaciones como intentar leer de un fichero de salida o viceversa pueden generar en errores.
Las clases ObjectInputStream y ObjectOutputStream
Son filtros de secuencia que permiten leer y escribir objetos de una corriente de datos orientada a
bytes. Solo tiene sentido si los datos almacenados son objetos.
El método readObject devuelve un object de los datos de la entrada.
Para controlar las excepciones mediante try catch, opcionalmente podemos controlar mediante
throws Exception en la función que usaremos
INGENIERIA DE SISTEMAS
ESTRUCTURAS DE DATOS (Ficheros)
A continuación se muestra un programa donde se hace uso de las clases mencionadas mediante
listas enlazadas
import java.io.*;
public class Nodo implements Serializable{
private String nombre;
private int nota;
Nodo enlace;
Nodo(String n,int no)
{
nombre=n;
nota=no;
enlace=null;
}
String getNombre()
{
return nombre;
}
int getNota()
{
return nota;
}
}
import java.io.*;
public class Lista{
Nodo cab;
File f=new File("d:\\notas.not");
void cargar()throws Exception
{
if(f.exists())
{
FileInputStream fis=new FileInputStream(f);
ObjectInputStream ois=new ObjectInputStream(fis);
cab=(Nodo)ois.readObject(); //cargamos el archivo al objeto alumno
fis.close();
ois.close();
}
Else{
f.createNewFile();
}
void insertar(String n,int no)
{
if(cab==null)
cab=new Nodo(n,no);
else
{
Nodo temp=new Nodo(n,no);
temp.enlace=cab;
cab=temp;
}
}
void mostrar()
{
Nodo aux=cab;
while(aux!=null)
{
System.out.println(aux.getNombre()+" "+aux.getNota());
aux=aux.enlace;
}
}
INGENIERIA DE SISTEMAS
ESTRUCTURAS DE DATOS (Ficheros)
void guardar()throws Exception
{
FileOutputStream fos=new FileOutputStream(f);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(cab);
//guardamos el objeto en el archivo
//se guarda los cambios realizados en la lista
fos.close();
oos.close();
}
}
import java.util.*;
public class menu {
public static void main(String[] args) throws Exception {
Scanner en=new Scanner(System.in);
Lista alumnos=new Lista();
alumnos.cargar();
int opc=10;
while(opc!=3)
{
mostrarMenu();
opc=en.nextInt();
switch(opc)
{
case 1:
System.out.println("Inserte Nombre y Nota");
alumnos.insertar(en.next(),en.nextInt());
break;
case 2:
alumnos.mostrar();
break;
case 3:
alumnos.guardar();
break;
}
}
}
static void mostrarMenu()
{
System.out.println("--------Menu-------");
System.out.println("1. insertar");
System.out.println("2. mostrar");
System.out.println("3. Grabar y salir");
}
}