SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
Entrada y salida de datos
                                                                                                  • Intercambio de datos entre el programa y el exterior
                                                                                                     • Diversidad de dispositivos (fichero, pantalla, red, …)
                                                                                                     • Diversidad de formas de comunicación
                                                                                                          ❏   Modo de acceso: secuencial, aleatorio
                                                                                                          ❏   Información intercambiada: binaria, caracteres, líneas
       Entrada y salida de datos                                                                  • Flujo (Stream)
                                                                                                     • Abstracción de cualquier fuente y/o destino de datos


                                                                                                                                   Flujo (stream)
                                                                                                                    Fuente       Datos      Datos                 Destino




Java      Entrada y Salida                                                                 1   Java      Entrada y Salida                                                                2




       Flujos estándar                                                                                Operación y flujos estándar en java
   • Los programas se comunican con flujos y estos flujos                                         • Lectura y escritura
     actúan como interfaz con el dispositivo o clase asociada                                              Lectura                                  Escritura
      • Operación independiente del tipo de datos y del dispositivo                                        Abrir un flujo                           Abrir un flujo
                                                                                                                                                    Mientras existan datos disponibles
                                                                                                           Mientras existan datos disponibles
      • Mayor flexibilidad (p.e. redirección, combinación)                                                     Leer datos                               Escribir datos
                                                                                                                                                    Cerrar el flujo
   • Flujos estándar                                                                                       Cerrar el flujo

      • Entrada estándar - habitualmente el teclado                                               • Java tiene acceso a la entrada/salida estándar a través de
      • Salida estándar - habitualmente la pantalla                                                 la clase java.lang.System
      • Salida de error - habitualmente la pantalla                                                  • Los flujos estándar son campos estáticos de System
                                                                                                     • Flujos
           Dispositivo                                                   Dispositivo
                             Flujo entrada              Flujo salida                                      ❏ System.in implementa la entrada estándar
           de entrada                        Programa                     de salida
            (teclado)
                                   Datos                    Datos
                                                                       (pantalla, disco)                  ❏ System.out implementa la salida estándar
                                                                                                          ❏ System.err implementa la salida de error




Java      Entrada y Salida                                                                 3   Java      Entrada y Salida                                                                4
Lectura y escritura en los flujos estándar                                                                           Ejemplo - uso flujos estándar
   • Los flujos se implementan en las clases del paquete java.io                                                                import java.io.*;
   • System.out
                                                                                                                                class LecturaDeLinea {
      • Instancia de la clase PrintStream - flujo de bytes de salida                                                                 public static void main( String args[] ) throws IOException {
      • Metodos de utilidad - impresión de datos                                                                                       int c;
           ❏   print(), println()                                                                                                      int contador = 0;
           ❏   flush() vacía el buffer de salida escribiendo su contenido                                                              // se lee hasta encontrar el fin de línea
                                                                                                                                       while( (c = System.in.read() ) != 'n' )
   • System.in                                                                                                                             {
      • Instancia de la clase InputStream - flujo de bytes de entrada                                                                        contador++;
                                                                                                                                             System.out.print( (char) c );
      • Metodos                                                                                                                            }
           ❏ read() permite leer un byte de la entrada como entero                                                                     System.out.println(); // Se escribe el cambio de línea
           ❏ skip(n ) ignora n bytes de la entrada                                                                                     System.err.println( "Contados "+ contador +" bytes en total." );
           ❏ available() número de bytes disponibles para leer en la entrada
                                                                                                                                       }
   • System.err - Funcionamiento similar a System.out                                                                           }

Java      Entrada y Salida                                                                                       5   Java      Entrada y Salida                                                           6




       Clasificación de flujos                                                                                              Paquete java.io - Flujos de caracteres
   • Representación de la información
           ❏   Flujos de bytes
           ❏   Flujos de caracteres
   • Propósito
           ❏ Entrada - (InputStream, Reader)
           ❏ Salida - (OutputStream, Writer)
           ❏ Entrada/Salida - (RandomAccessFile)

   • Acceso
           ❏   Secuencial
           ❏   Directo o aleatorio - (RandomAccessFile)
   • Por operación
           ❏   Transferencia de datos
           ❏   Transformación de los datos
                Realizan algún tipo de procesamiento sobre los datos (p.e. buffering, conversiones, filtrados)




Java      Entrada y Salida                                                                                       7   Java      Entrada y Salida                                                           8
Paquete java.io - Flujos de bytes                                                                Paquete java.io
                                                                                                    • InputStreamReader
                                                                                                       • Lee bytes de un flujo InputStream y los convierte en caracteres
                                                                                                         Unicode
                                                                                                       • Métodos de utilidad
                                                                                                            ❏   read () lee un único caracter
                                                                                                            ❏   ready() indica cuando está listo el flujo para lectura
                                                                                                    • BufferedReader
                                                                                                       • Entrada mediante búfer, mejora el rendimiento
                                                                                                       • Método de utilidad
                                                                                                            ❏   readLine() lectura de una línea como cadena

                                                                                                                             InputStreamReader isr = new InputStreamReader(System.in);
                                                                                                                             BufferedReader Teclado = new BufferedReader (isr);
                                                                                                                             String cadena = Teclado.readLine();

Java      Entrada y Salida                                                                  9    Java      Entrada y Salida                                                              10




       Combinación de flujos                                                                            Ejemplo - combinación de flujos
   • Los flujos se pueden combinar para obtener la
     funcionalidad deseada                                                                                           import java.io.*;
                                                                                                                     class Eco {
                                                                                                                      public static void main (String[] args) throws IOException
                    InputStream   InputStreamReader     BufferedReader
                                                                                                                      {
                                                                                                                        BufferedReader entradaEstandar = new BufferedReader
                                                                                 Programa                                 (new InputStreamReader(System.in));
                                  Lee bytes y los pasa Utiliza un búfer para                                            String mensaje;
                     Lee bytes
                                  a caracteres Unicode   mejorar eficiencia
                                                       de lectura de carateres                                               System.out.println (”Introducir una linea de texto:");
                                                                                                                             mensaje = entradaEstandar.readLine();
                                                                                                                             System.out.println (”Introducido: "" + mensaje + """);
                                                                                                                         }
                                       Flujos de transformación de datos                                             }



Java      Entrada y Salida                                                                  11   Java      Entrada y Salida                                                              12
La clase Teclado -- Javadoc                                                                             La clase Teclado
          package es.ucm.esi;                                                                                  // continuación de la clase teclado
          import java.io.*;                                                                                    /** lee un numero entero desde la entrada estandar
          /**                                                                                                   *           @return numero entero de tipo int
          * <p><p> La clase <em>Teclado</em> permite hacer transparente la lectura sencilla                     *           @exception excepciones No lanza ningun tipo de excepcion de estrada/salida
          * de los tipos mas comunes de datos desde la entrada estandar                                         */
          */                                                                                                   public static int leerInt() {
          public class Teclado {                                                                                            int entero = 0;
               /** variable de clase asignada a la entrada estandar del sistema */                                          boolean error = false;
                public static BufferedReader entrada =                                                                      do {
                                 new BufferedReader(new InputStreamReader(System.in));                                          try {
                                                                                                                                        error = false;
                /** lee una cadena desde la entrada estandar                                                                            entero = Integer.valueOf(entrada.readLine()).intValue();
                 *    @return cadena de tipo String                                                                             }catch (NumberFormatException e1) {
                 *    @exception excepciones No lanza ningun tipo de excepcion de estrada/salida                                        error = true;
                 */                                                                                                                     System.out.println("Error en el formato del numero, intentelo de nuevo.");
                public static String leerString() {                                                                             }catch (IOException e) {
                          String cadena="";                                                                                             System.out.println("Error de E/S");}
                           try {                                                                                            } while (error);
                                  cadena = new String(entrada.readLine());                                                  return entero;
                          }catch (IOException e) {                                                                          }
                                  System.out.println("Error de E/S"); }                                        } // final de la clase Teclado
                      return cadena; } // la clase Teclado continua
Java      Entrada y Salida                                                                         13   Java         Entrada y Salida                                                                                14




       Java 1.1 - Ficheros de texto                                                                            Java 1.1- Ejemplo Ficheros de texto
   • FileReader                                                                                                import java.io.*;
                                                                                                               public class FicheroTexto {
      • Util para leer ficheros de texto                                                                         public static void main(String args[]) {
           ❏   Constructor: FileReader(String nombreFichero)                                                       try { // escritura de datos
   • FileWriter                                                                                                     PrintWriter salida = new PrintWriter( new BufferedWriter(
                                                                                                                                      new FileWriter("prueba.txt")));
      • Util para escribir ficheros de texto                                                                         salida.println("en un lugar de la mancha de cuyo");
      • Constructores                                                                                                salida.println("nombre no quiero acordarme");
                                                                                                                     salida.close();
           ❏   FileWriter(String nombreFichero) -- reescribe                                                         // lectura de datos
           ❏   FileWriter(String nombreFichero, boolean añadirFinal) -- añade                                        BufferedReader entrada =new BufferedReader(new FileReader("prueba.txt"));
   • PrintWriter                                                                                                     String s, s2 = new String();
                                                                                                                     while((s = entrada.readLine())!= null)
      • Implementa un flujo de salida de caracteres                                                                         s2 = s2 + s + "n";
      • Métodos de utilidad                                                                                          System.out.println("Texto leido:" + "n" + s2);
                                                                                                                     entrada.close();
           ❏   print(), println(), close()                                                                        } catch (java.io.IOException e) {}
                                                                                                               }}

Java      Entrada y Salida                                                                         15   Java         Entrada y Salida                                                                                16
Ficheros de texto con datos numéricos                                                        Ficheros
        import java.io.*;
        public class FicheroTexto {                                                             • Clase File
          public static void main(String args[]) {
             int i=5;                                                                              • Constructores
             float f=5.5f;                                                                               ❏ File(String ruta)
            try {     // escritura de datos
             PrintWriter salida = new PrintWriter( new BufferedWriter(                                   ❏ File(String ruta, String nombre)
                      new FileWriter("hola.txt")));                                                      ❏ File(File directorio, String nombre)
              salida.println("en un lugar de la mancha de cuyo");
              salida.println(i);                                                                      • Métodos
              salida.println("nombre no quiero acordarme");                                              ❏ canRead() comprueba si el fichero se puede leer
              salida.println(f);
              salida.close();                                                                            ❏ canWrite() comprueba siel fichero se puede escribir
              // lectura de datos                                                                        ❏ delete() borra dicho fichero
              BufferedReader entrada =new BufferedReader(new FileReader("hola.txt"));
                                                                                                         ❏ getPath() devuelve la ruta del fichero
              String s, s2 = new String();
              while((s = entrada.readLine())!= null)                                                     ❏ mkdir() crea un directorio con la ruta del objeto que lo recibe
                                   s2 = s2 + s + "n";                                                   ❏ isDirectory() comprueba si dicho fichero es un directorio
              System.out.println("Texto leido:" + "n" + s2);
              entrada.close();                                                                        • Constructores de otras clases
           } catch (java.io.IOException e) {System.out.println("excepcion");}
        }}                                                                                               ❏   FileReader(File fichero)
                                                                                                         ❏   FileWriter(File fichero)

Java         Entrada y Salida                                                           17   Java       Entrada y Salida                                                     18




       Ejemplo - copia de ficheros                                                                  Serialización de objetos
                     import java.io.*;                                                          • Serializar es almacenar objetos de forma permanente (p.e.
                     public class CopiaFicheros {
                                                                                                  en un fichero o en un flujo de comunicación)
                       public static void main(String[] args) throws IOException {                 • No es necesario realizar conversiones
                          File ficheroEntrada = new File("original.txt");
                          File ficheroSalida = new File("copia.txt");                              • Útil para portabilidad y para compartir objetos entre
                                                                                                     aplicaciones
                             FileReader entrada = new FileReader(ficheroEntrada);
                             FileWriter salida = new FileWriter(ficheroSalida);                 • Flujos
                             int dato;                                                             • Clase ObjectOuputStream
                                                                                                         ❏   Método - writeObject()
                             while ((dato = entrada.read()) != -1)
                                                                                                         ❏   Ejemplo: flujoSalida.writeObjetct (objetoClase);
                              salida.write(dato);
                                                                                                      • Clase ObjectInputStream
                             entrada.close();                                                            ❏   Método - readObject()
                             salida.close();                                                             ❏   Ejemplo: objetoClase = (Clase) flujoEntrada.readObject();
                         }
                     }

Java         Entrada y Salida                                                           19   Java       Entrada y Salida                                                     20
Interfaz de serialización                                                                               Serialización: ejemplo
                                                                                                               import java.io.*;
   • Cualquier clase que desee poder serializar sus objetos                                                    public class Punto implements Serializable {
     debe implementar el interfaz Serializable                                                                    int x; int y;
                                                                                                                 public Punto(int x, int y) { this.x = x; this.y = y;}
      • En esta implementación el objeto define como debe                                                        public String toString() { return “Punto[“ + x + ”,” + y + ”]”; }
        almacenarse o recuperarse de un fichero
                                                                                                               public class AplicacionSerializacion {
      • Si se trata de serializar un objeto que no lo implementa se
        obtiene la excepción NotSerializableException                                                             public static void main(String args[]) throws IOException, ClassNotFoundException {
                                                                                                                         Punto punto = new Punto(1, 5);
      • No se serializan los miembros static o transient                                                                 ObjectOutputStream ficheroObjetosSal = new ObjectOutputStream(
      • Las clases que necesiten algún tratamiento especial en la                                                                   new FileOutputStream("temp"));
                                                                                                                         ficheroObjetosSal.writeObject(punto);
        serialización deben implementar estos dos métodos                                                                ficheroObjetosSal.close();
                          private void writeObject (java.io.ObjectOutputStream salida)
                                              throws IOException                                                         ObjectInputStream ficheroObjetosEnt = new ObjectInputStream(
                                                                                                                                  new FileInputStream("temp"));
                           private void readObject (java.io.ObjectInputStream entrada)                                   Punto punt = (Punto) ficheroObjetosEnt.readObject();
                                 throws IOException, ClassNotFoundException;                                             ficheroObjetosEnt.close();
                                                                                                                         System.out.println( punt );}}
Java          Entrada y Salida                                                                     21   Java          Entrada y Salida                                                                  22




       Serialización: ejemplo particularización
       import java.io.*;
       public class Punto implements Serializable {
                 int x; int y;
                 java.util.Date fecha; // fecha de creación del objeto

                 public Punto(int x, int y) {this.x= x; this.y= y; fecha= new java.util.Date();}
                 public String toString() {return "Punto[" + x + "," + y + "];" + fecha;}

                 private void writeObject (ObjectOutputStream salida)
                     throws IOException {
                           salida.writeInt(x);
                           salida.writeInt(y); // no se almacena la fecha de creación
                 }
                 private void readObject (ObjectInputStream entrada)
                     throws IOException, ClassNotFoundException {
                           x= entrada.readInt();
                           y = entrada.readInt();
                           fecha= new java.util.Date(); // se construye la fecha de creación
                 }}
Java          Entrada y Salida                                                                     23

Mais conteúdo relacionado

Semelhante a Entrada salida

Entrada y Salida de datos en Java
Entrada y Salida de datos en JavaEntrada y Salida de datos en Java
Entrada y Salida de datos en Javakunno10
 
Nuevo presentación de microsoft office power point
Nuevo presentación de microsoft office power pointNuevo presentación de microsoft office power point
Nuevo presentación de microsoft office power pointJ_cordero
 
No numerica ii
No numerica iiNo numerica ii
No numerica iiJ_cordero
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y SalidaCristian Andres
 
ENTRADA Y SALIDA DE DATOS
ENTRADA Y SALIDA DE DATOSENTRADA Y SALIDA DE DATOS
ENTRADA Y SALIDA DE DATOSnena_macc
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVAMichelle Torres
 
Entrada y salida de datos en java
Entrada y salida de datos en javaEntrada y salida de datos en java
Entrada y salida de datos en javatensanti
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativoHector Caro
 
Trabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica iiTrabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica iirafaelrojas91
 
Trabajo sobre archivos en java.. programación no numérica II
Trabajo sobre archivos en java.. programación no numérica IITrabajo sobre archivos en java.. programación no numérica II
Trabajo sobre archivos en java.. programación no numérica IIrafaelrojas91
 

Semelhante a Entrada salida (20)

Entrada y Salida de datos en Java
Entrada y Salida de datos en JavaEntrada y Salida de datos en Java
Entrada y Salida de datos en Java
 
Flujo datos
Flujo datosFlujo datos
Flujo datos
 
Nuevo presentación de microsoft office power point
Nuevo presentación de microsoft office power pointNuevo presentación de microsoft office power point
Nuevo presentación de microsoft office power point
 
Aplicaciones java
Aplicaciones javaAplicaciones java
Aplicaciones java
 
Aplicaciones java
Aplicaciones javaAplicaciones java
Aplicaciones java
 
Java
JavaJava
Java
 
No numerica ii
No numerica iiNo numerica ii
No numerica ii
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y Salida
 
ENTRADA Y SALIDA DE DATOS
ENTRADA Y SALIDA DE DATOSENTRADA Y SALIDA DE DATOS
ENTRADA Y SALIDA DE DATOS
 
Aplicaciones java
Aplicaciones javaAplicaciones java
Aplicaciones java
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVA
 
Entrada y salida de datos en java
Entrada y salida de datos en javaEntrada y salida de datos en java
Entrada y salida de datos en java
 
Tema2
Tema2Tema2
Tema2
 
Cap10 ficheros
Cap10 ficherosCap10 ficheros
Cap10 ficheros
 
Sdl
SdlSdl
Sdl
 
Programacion no numerica2
Programacion no numerica2Programacion no numerica2
Programacion no numerica2
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Trabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica iiTrabajo sobre archivos en java.. programacion no numerica ii
Trabajo sobre archivos en java.. programacion no numerica ii
 
Trabajo sobre archivos en java.. programación no numérica II
Trabajo sobre archivos en java.. programación no numérica IITrabajo sobre archivos en java.. programación no numérica II
Trabajo sobre archivos en java.. programación no numérica II
 
Java
JavaJava
Java
 

Entrada salida

  • 1. Entrada y salida de datos • Intercambio de datos entre el programa y el exterior • Diversidad de dispositivos (fichero, pantalla, red, …) • Diversidad de formas de comunicación ❏ Modo de acceso: secuencial, aleatorio ❏ Información intercambiada: binaria, caracteres, líneas Entrada y salida de datos • Flujo (Stream) • Abstracción de cualquier fuente y/o destino de datos Flujo (stream) Fuente Datos Datos Destino Java Entrada y Salida 1 Java Entrada y Salida 2 Flujos estándar Operación y flujos estándar en java • Los programas se comunican con flujos y estos flujos • Lectura y escritura actúan como interfaz con el dispositivo o clase asociada Lectura Escritura • Operación independiente del tipo de datos y del dispositivo Abrir un flujo Abrir un flujo Mientras existan datos disponibles Mientras existan datos disponibles • Mayor flexibilidad (p.e. redirección, combinación) Leer datos Escribir datos Cerrar el flujo • Flujos estándar Cerrar el flujo • Entrada estándar - habitualmente el teclado • Java tiene acceso a la entrada/salida estándar a través de • Salida estándar - habitualmente la pantalla la clase java.lang.System • Salida de error - habitualmente la pantalla • Los flujos estándar son campos estáticos de System • Flujos Dispositivo Dispositivo Flujo entrada Flujo salida ❏ System.in implementa la entrada estándar de entrada Programa de salida (teclado) Datos Datos (pantalla, disco) ❏ System.out implementa la salida estándar ❏ System.err implementa la salida de error Java Entrada y Salida 3 Java Entrada y Salida 4
  • 2. Lectura y escritura en los flujos estándar Ejemplo - uso flujos estándar • Los flujos se implementan en las clases del paquete java.io import java.io.*; • System.out class LecturaDeLinea { • Instancia de la clase PrintStream - flujo de bytes de salida public static void main( String args[] ) throws IOException { • Metodos de utilidad - impresión de datos int c; ❏ print(), println() int contador = 0; ❏ flush() vacía el buffer de salida escribiendo su contenido // se lee hasta encontrar el fin de línea while( (c = System.in.read() ) != 'n' ) • System.in { • Instancia de la clase InputStream - flujo de bytes de entrada contador++; System.out.print( (char) c ); • Metodos } ❏ read() permite leer un byte de la entrada como entero System.out.println(); // Se escribe el cambio de línea ❏ skip(n ) ignora n bytes de la entrada System.err.println( "Contados "+ contador +" bytes en total." ); ❏ available() número de bytes disponibles para leer en la entrada } • System.err - Funcionamiento similar a System.out } Java Entrada y Salida 5 Java Entrada y Salida 6 Clasificación de flujos Paquete java.io - Flujos de caracteres • Representación de la información ❏ Flujos de bytes ❏ Flujos de caracteres • Propósito ❏ Entrada - (InputStream, Reader) ❏ Salida - (OutputStream, Writer) ❏ Entrada/Salida - (RandomAccessFile) • Acceso ❏ Secuencial ❏ Directo o aleatorio - (RandomAccessFile) • Por operación ❏ Transferencia de datos ❏ Transformación de los datos Realizan algún tipo de procesamiento sobre los datos (p.e. buffering, conversiones, filtrados) Java Entrada y Salida 7 Java Entrada y Salida 8
  • 3. Paquete java.io - Flujos de bytes Paquete java.io • InputStreamReader • Lee bytes de un flujo InputStream y los convierte en caracteres Unicode • Métodos de utilidad ❏ read () lee un único caracter ❏ ready() indica cuando está listo el flujo para lectura • BufferedReader • Entrada mediante búfer, mejora el rendimiento • Método de utilidad ❏ readLine() lectura de una línea como cadena InputStreamReader isr = new InputStreamReader(System.in); BufferedReader Teclado = new BufferedReader (isr); String cadena = Teclado.readLine(); Java Entrada y Salida 9 Java Entrada y Salida 10 Combinación de flujos Ejemplo - combinación de flujos • Los flujos se pueden combinar para obtener la funcionalidad deseada import java.io.*; class Eco { public static void main (String[] args) throws IOException InputStream InputStreamReader BufferedReader { BufferedReader entradaEstandar = new BufferedReader Programa (new InputStreamReader(System.in)); Lee bytes y los pasa Utiliza un búfer para String mensaje; Lee bytes a caracteres Unicode mejorar eficiencia de lectura de carateres System.out.println (”Introducir una linea de texto:"); mensaje = entradaEstandar.readLine(); System.out.println (”Introducido: "" + mensaje + """); } Flujos de transformación de datos } Java Entrada y Salida 11 Java Entrada y Salida 12
  • 4. La clase Teclado -- Javadoc La clase Teclado package es.ucm.esi; // continuación de la clase teclado import java.io.*; /** lee un numero entero desde la entrada estandar /** * @return numero entero de tipo int * <p><p> La clase <em>Teclado</em> permite hacer transparente la lectura sencilla * @exception excepciones No lanza ningun tipo de excepcion de estrada/salida * de los tipos mas comunes de datos desde la entrada estandar */ */ public static int leerInt() { public class Teclado { int entero = 0; /** variable de clase asignada a la entrada estandar del sistema */ boolean error = false; public static BufferedReader entrada = do { new BufferedReader(new InputStreamReader(System.in)); try { error = false; /** lee una cadena desde la entrada estandar entero = Integer.valueOf(entrada.readLine()).intValue(); * @return cadena de tipo String }catch (NumberFormatException e1) { * @exception excepciones No lanza ningun tipo de excepcion de estrada/salida error = true; */ System.out.println("Error en el formato del numero, intentelo de nuevo."); public static String leerString() { }catch (IOException e) { String cadena=""; System.out.println("Error de E/S");} try { } while (error); cadena = new String(entrada.readLine()); return entero; }catch (IOException e) { } System.out.println("Error de E/S"); } } // final de la clase Teclado return cadena; } // la clase Teclado continua Java Entrada y Salida 13 Java Entrada y Salida 14 Java 1.1 - Ficheros de texto Java 1.1- Ejemplo Ficheros de texto • FileReader import java.io.*; public class FicheroTexto { • Util para leer ficheros de texto public static void main(String args[]) { ❏ Constructor: FileReader(String nombreFichero) try { // escritura de datos • FileWriter PrintWriter salida = new PrintWriter( new BufferedWriter( new FileWriter("prueba.txt"))); • Util para escribir ficheros de texto salida.println("en un lugar de la mancha de cuyo"); • Constructores salida.println("nombre no quiero acordarme"); salida.close(); ❏ FileWriter(String nombreFichero) -- reescribe // lectura de datos ❏ FileWriter(String nombreFichero, boolean añadirFinal) -- añade BufferedReader entrada =new BufferedReader(new FileReader("prueba.txt")); • PrintWriter String s, s2 = new String(); while((s = entrada.readLine())!= null) • Implementa un flujo de salida de caracteres s2 = s2 + s + "n"; • Métodos de utilidad System.out.println("Texto leido:" + "n" + s2); entrada.close(); ❏ print(), println(), close() } catch (java.io.IOException e) {} }} Java Entrada y Salida 15 Java Entrada y Salida 16
  • 5. Ficheros de texto con datos numéricos Ficheros import java.io.*; public class FicheroTexto { • Clase File public static void main(String args[]) { int i=5; • Constructores float f=5.5f; ❏ File(String ruta) try { // escritura de datos PrintWriter salida = new PrintWriter( new BufferedWriter( ❏ File(String ruta, String nombre) new FileWriter("hola.txt"))); ❏ File(File directorio, String nombre) salida.println("en un lugar de la mancha de cuyo"); salida.println(i); • Métodos salida.println("nombre no quiero acordarme"); ❏ canRead() comprueba si el fichero se puede leer salida.println(f); salida.close(); ❏ canWrite() comprueba siel fichero se puede escribir // lectura de datos ❏ delete() borra dicho fichero BufferedReader entrada =new BufferedReader(new FileReader("hola.txt")); ❏ getPath() devuelve la ruta del fichero String s, s2 = new String(); while((s = entrada.readLine())!= null) ❏ mkdir() crea un directorio con la ruta del objeto que lo recibe s2 = s2 + s + "n"; ❏ isDirectory() comprueba si dicho fichero es un directorio System.out.println("Texto leido:" + "n" + s2); entrada.close(); • Constructores de otras clases } catch (java.io.IOException e) {System.out.println("excepcion");} }} ❏ FileReader(File fichero) ❏ FileWriter(File fichero) Java Entrada y Salida 17 Java Entrada y Salida 18 Ejemplo - copia de ficheros Serialización de objetos import java.io.*; • Serializar es almacenar objetos de forma permanente (p.e. public class CopiaFicheros { en un fichero o en un flujo de comunicación) public static void main(String[] args) throws IOException { • No es necesario realizar conversiones File ficheroEntrada = new File("original.txt"); File ficheroSalida = new File("copia.txt"); • Útil para portabilidad y para compartir objetos entre aplicaciones FileReader entrada = new FileReader(ficheroEntrada); FileWriter salida = new FileWriter(ficheroSalida); • Flujos int dato; • Clase ObjectOuputStream ❏ Método - writeObject() while ((dato = entrada.read()) != -1) ❏ Ejemplo: flujoSalida.writeObjetct (objetoClase); salida.write(dato); • Clase ObjectInputStream entrada.close(); ❏ Método - readObject() salida.close(); ❏ Ejemplo: objetoClase = (Clase) flujoEntrada.readObject(); } } Java Entrada y Salida 19 Java Entrada y Salida 20
  • 6. Interfaz de serialización Serialización: ejemplo import java.io.*; • Cualquier clase que desee poder serializar sus objetos public class Punto implements Serializable { debe implementar el interfaz Serializable int x; int y; public Punto(int x, int y) { this.x = x; this.y = y;} • En esta implementación el objeto define como debe public String toString() { return “Punto[“ + x + ”,” + y + ”]”; } almacenarse o recuperarse de un fichero public class AplicacionSerializacion { • Si se trata de serializar un objeto que no lo implementa se obtiene la excepción NotSerializableException public static void main(String args[]) throws IOException, ClassNotFoundException { Punto punto = new Punto(1, 5); • No se serializan los miembros static o transient ObjectOutputStream ficheroObjetosSal = new ObjectOutputStream( • Las clases que necesiten algún tratamiento especial en la new FileOutputStream("temp")); ficheroObjetosSal.writeObject(punto); serialización deben implementar estos dos métodos ficheroObjetosSal.close(); private void writeObject (java.io.ObjectOutputStream salida) throws IOException ObjectInputStream ficheroObjetosEnt = new ObjectInputStream( new FileInputStream("temp")); private void readObject (java.io.ObjectInputStream entrada) Punto punt = (Punto) ficheroObjetosEnt.readObject(); throws IOException, ClassNotFoundException; ficheroObjetosEnt.close(); System.out.println( punt );}} Java Entrada y Salida 21 Java Entrada y Salida 22 Serialización: ejemplo particularización import java.io.*; public class Punto implements Serializable { int x; int y; java.util.Date fecha; // fecha de creación del objeto public Punto(int x, int y) {this.x= x; this.y= y; fecha= new java.util.Date();} public String toString() {return "Punto[" + x + "," + y + "];" + fecha;} private void writeObject (ObjectOutputStream salida) throws IOException { salida.writeInt(x); salida.writeInt(y); // no se almacena la fecha de creación } private void readObject (ObjectInputStream entrada) throws IOException, ClassNotFoundException { x= entrada.readInt(); y = entrada.readInt(); fecha= new java.util.Date(); // se construye la fecha de creación }} Java Entrada y Salida 23