Practica 4 de Programación Flujos Mandar por email (con asunto Programación P4) todos los ficheros en una carpeta comprimida (.zip o .rar) cuyo nombre es el NIA o los NIAs de los estudiantes. La fecha de entrega es el Lunes 26 de Mayo 2007 a las 23:59. El objetivo de esta práctica es leer desde un flujo de entrada el texto etiquetado almacenado en un fichero (input.txt) y escribir los resultados a un flujo de salida. El contenido de input.txt es el etiquetaje del siguiente texto (fuente: El periódico online, 08/05/2006): Dinou persones han mort en els 16 accidents de trànsit registrats durant el cap de setmana, segons la Direcció General de Trànsit (DGT). En aquests mateixos sinistres, 12 persones han resultat ferides greus, i 11 més, lleus. Divendres hi va haver dos accidents, en què van morir dues persones i una va resultar ferida greu, mentre que dissabte van morir 11 persones en nou sinistres amb 10 ferits greus i vuit de lleus. Diumenge sis persones van morir en sis accidents, en què també hi va haver un ferit greu i tres de lleus. Actividad 1: En esta actividad vamos a leer el análisis morfológico del artículo desde el flujo de entrada estándar, línea por línea, usando el método readLine() de BufferedReader, pero redirigiendo el flujo de entrada estándar con “<” desde la línea de comandos, para así poder leer el análisis desde un fichero en vez de entrar los datos con el teclado. Para hacer esta actividad, hay que haber probado e entendido los programas SystemIn.java, InStream.java (o Sumar.java) de la clase de teoría. a) Desde el main de ProcessText abrir un flujo de tipo BufferedReader a partir del flujo de entrada estándar System.in (como en el programa SystemIn.java) y llamar a processText(BufferedReader br). No olvidar cerrar los flujos abiertos después de la llamada a processText. b) Completar el método processText(BufferedReader br). Ahora en vez de coger un String como argumento de entrada como en las practicas anteriores y procesarlo con un StringTokenizer, el método processText coge un flujo de tipo BufferedReader y procesa las líneas leídas del flujo con readLine()), imprimiendo los resultados a la pantalla. Ver como se leen líneas del BufferedReader en bucle dentro de InStream.java o Sumar.java. c) Probar el programa desde una ventana cmd con input.txt que contiene el análisis morfológico del texto de arriba, redirigiendo el flujo de entrada estándar (con el operador de redirección “<”) para que se lea el archivo. Dar una impresión de pantalla para mostrar la ejecución. d) Redirigir el flujo de salida estándar hacia un fichero con el operador de redirección “>” en la línea de comandos, para que todos los System.out.println se hagan en un fichero en vez de la pantalla. Dar una impresión de pantalla e adjuntar el fichero creado. Actividad 2: Hacemos lo mismo que en la actividad 1, pero leyendo un fichero e escribiendo a un fichero sin usar operadores de redirección en la ventana cmd. Para hacer esta actividad, hay que haber probado e entendido los programas InStream.java e OutStream.java de la clase de teoría. a) Completar el método imprimir(FileWriter fw) de Morpho. En vez de escribir al flujo de salida estándar como imprimir(), este método escribe al flujo de salida de tipo FileWriter. b) Completar el método imprimir(FileWriter fw) de Word. En vez de escribir al flujo de salida estándar como imprimir(), este método escribe al flujo de salida de tipo FileWriter. El método llama al método imprimir(FileWriter fw) de Morpho. c) Completar el método processText(BufferedReader br,FileWriter fw) de ProcessText, que, como processText(BufferedReader br), lee el análisis morfológico desde un flujo de tipo BufferedReader, pero imprime el análisis compacto a un flujo de tipo FileWriter. Este método llama a imprimir(FileWriter fw) de Word. d) Completar el método leerEscribir(String input,String output) de ProcessText, que abre un flujo de tipo BufferedReader desde el fichero con camino completo input, e abre un flujo de tipo FileWriter desde el fichero con camino completo output. El método llama a processText(BufferedReader br,FileWriter fw). No olvidar cerrar los flujos después de la llamada. e) En el main, recoger los ficheros de entrada y de salida como argumentos de línea de comandos y llamar a leerEscribir(String input,String output). Probar el programa.