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"); } }