Hasta el momento para leer y escribir los datos durante la ejecución del programa se ha utilizado el teclado y la pantalla respectivamente para lograrlo; sin embargo, también se pueden usar archivos o crear archivos con la información requerida por el programa.
Para que una clase pueda hacer uso de los métodos para usar o crear un archivo es necesario que implemente la interfaz Serializable.
Los archivos pueden ser leídos o creados usando flujo de bytes o flujo de caracteres.
En la siguiente tabla se ilustran los tipos de objetos que se usarán dependiendo del tipo de flujo usado:
FLUJOS BASADOS EN BYTES
Para leer un archivo se usará la clase
FileInputStream
con la siguiente sintáxis:FileInputStream nombreObjeto = new FileInputStream("nombreArchivo.txt");
Los métodos que se usarán son:
read() : lee un byte de los datos del archivo nombreArchivo.txt
close() : cierra el archivo y los recursos asociados a el.
Para escribir en un archivo se usará la clase
FileOutputStream
, su sintáxis es:
FileOutputStream nombreObjeto = new FileOutputStream("nombreArchivo.txt");
Los métodos que se usarán son:
write(byte[] b): escribe b.length bytes del array al archivo.
write(int b): escribe el byte b en el archivo.
Para obtener los resultados esperados, es necesario usar un constructor que permite vincular los datos del archivo con otro objeto; este constructor es ObjectOutputStream.
Por lo tanto, ahora se escribirá en el archivo a través del objeto creado por este constructor. El método a usar es writeObject().Así mismo, para leer el archivo, se usará el constructor ObjectInputStream y el métodoreadObject().
En el siguiente ejemplo se podrán visualizar las excepciones principales que se deben tratar al momento de trabajar con escritura de archivos:
public static void main(String args[]){ ArrayList<Estudiante> listaEstudiantes = new ArrayList<Estudiante>(); listaEStudiantes.add(new Estudiante("Alejandro", "1734242523")); listaEStudiantes.add(new Estudiante("Luis", "1732452354"));
//Estableciendo objetos para manipular datos de archivos FileInputStream ingreso = null; FileOutputStream salida;
try {
//Creación de archivo estudianteO.txt y lectura de archivo estudianteI.txtingreso = new FileInputStream("estudianteI.txt"); salida = new FileOutputStream("estudianteO.txt"); int c;//Creación de Objetos para usar archivo
ObjectOutputStream salida = new ObjectOutputStream(inng); salida.writeObject(listaEstudiantes); //Ingresando listaEstudiantes al archivo estudianteO.txt salida.close(); //Cerrando el flujo, cerrando el archivo } catch (FileNotFoundException ex) { System.out.println("Archivo no encontrado"); } catch (ClassNotFoundException ex) {System.out.println("Clase vinculada al archivo no encontrada");
} catch (IOException ex) {System.out.println("Ingreso erróneo de datos");
}finally { if (ingreso != null) { ingreso.close(); } } } }