//: MuestraFichero.java
// Muestra el fichero que se pasa como argumento en la linea de comandos
// Uso: java MuestraFichero fichero
// Ejemplo de uso: java MuestraFichero MuestraFichero.java
//
// Importamos las clases de Entrada/Salida

import java.io.*;


/**Clase que contiene el main
  *@author Laboratorio de Lenguajes de Programacion 2003
  */
public class MuestraFichero{

   public static void main(String[] args){
      
      int c;
      String cadena;
      
      /* El constructor de FileReader arroja una excepcion
         FileNotFoundException si no encuentra el fichero 
         y el metodo read() lanza una excepcion IOException 
         si se produce algun error durante la lectura.
         Por tanto analizamos las sentencias del constructor
         y del metodo read() por si se producen excepciones 
         mediante try*/
      
      try{
         
         // Creamos un flujo de datos de caracteres asociado a un fichero
         
         FileReader fr = new FileReader(args[0]);
         
         /*read() devuelve un int que convertimos a char para mostrar el
           caracter. El final de fichero en este caso se detecta cuando
           el valor devuelto por read() es -1 */ 
         
         while ((c=fr.read())!=-1){
            System.out.print((char)c);
         }
         
         // Cerramos el flujo de datos
         
         fr.close();
         
         /* Para que el programa se pare, esperando que se pulse una tecla
            usamos el metodo read() de System.in. in es un atributo estatico
            del tipo InputStream (flujo orientado a bytes asociado
            a la entrada estandar). El metodo read() de esta
            clase lee un int y arroja un IOException ante un error, por
            ello se ha puesto dentro del bloque try{}*/
             
         
         System.in.read();         

      }
      /* Puesto que IOException y FileNotFoundException derivan de Exception
         aqui las recogeriamos. Ver Nota al final del codigo*/
      catch(Exception e){
         System.out.println("Error con el fichero");
      }
      
      
      // Otro modo de leer el fichero: linea a linea
      // Lectura del fichero pero ahora usando un BufferedReader
      
      try{
         
         // Envolvemos el FileReader con un BufferedReader
         
         BufferedReader br = new BufferedReader( new FileReader(args[0]) );
         
         /*readLine() devuelve un String 
           El final de fichero en este caso se detecta cuando
           el valor devuelto por readLine() es null */ 
         
         while ((cadena = br.readLine() )!=null){
            System.out.println(cadena);
         }
         
         // Cerramos el flujo de datos
         
         br.close();
      }
      // Se puede hacer lo mismo que en el caso anterior
      catch(Exception e){
         System.out.println("Error con el fichero");
      }
            
   }
   
}
            
/* Nota:
   Si por algun motivo quisieramos recoger cada excepcion por separado
   (por ejemplo para ser mas explicitos con el mensaje que enviamos)
   podriamos hacer lo siguiente:
   catch(FileNotFoundException e){
      System.out.println("Fichero no encontrado");
   }
   catch(IOException e){
      System.out.println("Error de lectura en el fichero");
   }
*/   
      
