import java.io.*; import java.util.*; import java.text.DateFormat; import java.text.ParseException; class LoggerIO { private Logger logger; private DateFormat format; private String eol; LoggerIO(Logger theLogger) { logger = theLogger; format = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.MEDIUM ); eol = System.getProperty( "line.separator" ); } void saveToText( List list, File f ) { try { FileWriter writer = new FileWriter( f ); ListIterator iter = list.listIterator(); while ( iter.hasNext() ) { Date nDate = (Date) iter.next(); String nString = format.format( nDate ) + eol; // escribe el código para escribir la cadena en el flujo } writer.close(); } catch ( IOException e ) { logger.announce( "Error al escribir texto en el archivo " + f.getName() ); } } void saveToData( List list, File f ) { // escribe el código para escribir toda la lista de fechas en // un DataOutputStream construido sobre un FileOutputStream // como secuencia de longitudes // preste atención a la gestión de errores } void saveToObject( List list, File f ) { // escribe el código para escribir toda la lista en un ObjectOutputStream // preste atención a la gestión de errores } List loadFromText( File f ) { List list = new LinkedList(); try { FileReader reader = new FileReader( f ); BufferedReader lineReader = new BufferedReader( reader ); String nLine; while ( (nLine = lineReader.readLine()) != null ) { try { // Escribe el código para convertir nLine en Date y Date en una lista // Utiliza el método DateFormat: // Date analiza (String s) y arroja una excepción ParseException if ( false ) throw new ParseException("",0); // para el compilador } catch (ParseException p ) { logger.announce( "No se puede analizar la fecha: " + nLine ); return list; } } lineReader.close(); } catch ( FileNotFoundException e ) { logger.announce( "No se puede encontrar el archivo " + f.getName() ); } catch ( IOException e ) { logger.announce( "Error al leer registro de texto desde el archivo " + f.getName() ); } return list; } List loadFromData( File f ) { DataInputStream dStream = null; List list = new LinkedList(); try { FileInputStream iStream = new FileInputStream( f ); dStream = new DataInputStream( iStream ); // Escribe el código para leer longitudes de dStream, convertirlas en fechas // y agregarlas a la lista. // Preste atención a cómo terminará el bucle de lectura. if ( false ) throw new EOFException(); // para el compilador } catch ( EOFException e ) { try { dStream.close(); } catch (IOException ee ) { logger.announce( "No se puede cerrar el archivo " + f.getName() ); } } catch ( FileNotFoundException e ) { logger.announce( "No se puede encontrar el archivo " + f.getName() ); } catch ( IOException e ) { logger.announce( "Error al leer el registro de datos desde el archivo " + f.getName() ); } return list; } List loadFromObject( File f ) { List list = null; ObjectInputStream objStream = null; try { // escribe el código para leer toda la lista de fechas if ( false ) throw new ClassNotFoundException(); // para el compilador if ( false ) throw new FileNotFoundException(); } catch ( ClassNotFoundException e ) { try { logger.announce( "Leer instancia de clase desconocida" ); objStream.close(); list = null; } catch (IOException ee ) { logger.announce( "No se puede cerrar el archivo " + f.getName() ); } } catch ( FileNotFoundException e ) { logger.announce( "No se puede encontrar el archivo " + f.getName() ); } catch ( IOException e ) { try { logger.announce( "Error al leer el registro de objetos desde el archivo " + f.getName() ); if ( objStream != null ) objStream.close(); list = null; } catch (IOException ee ) { logger.announce( "No se puede cerrar el archivo " + f.getName() ); } } return list; } }