La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Capitulo 12 Archivos de Ingreso y Salida.

Presentaciones similares


Presentación del tema: "©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Capitulo 12 Archivos de Ingreso y Salida."— Transcripción de la presentación:

1 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Capitulo 12 Archivos de Ingreso y Salida

2 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 2 Objetivos –Clase JFileChooser interfaz gráfica para la selección de archivos –Escribir y leer bytes desde y hacia arch, usando FileOutputStream and FileInputStream. –Escribir valores de tipo de dato primitivo a un arch y leerlos usando DataOutputStream and DataInputStream. –Escribir y leer textos usando usando PrintWriter y BufferedReader –Leer un arch de texto usando Scanner –Escribir y leer objetos a y desde un arch usando ObjectOutputStream y ObjectInputStream

3 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 3 La clase File Para operar con un arch, primero hay que crearlo un objeto File (from java.io). File inFile = new File(“sample.dat”); File inFile = new File (“C:/SamplePrograms/test.dat”); Abre un archivo: sample.dat en el directorio actual Abre el arch test.dat del directorio C:\SamplePrograms por compatibilidad aún en windows se usa “/”

4 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 4 Algunos métodos de File if ( inFile.exists( ) ) { if ( inFile.isFile() ) { File directory = new File("C:/JavaProgramas/Ch12"); String filename[] = directory.list(); for (int i = 0; i < filename.length; i++) { System.out.println(filename[i]); } Ver si inFile está asociada a un arch real Ver si inFile está asociada a un arch o no. Si devuelve falso, es un directorio Listar todos los arch del en el directorio C:\JavaProgramas\Ch12 Listar todos los arch del en el directorio C:\JavaProgramas\Ch12 retorna un arreglo de String

5 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 5 JFileChooser Filtro

6 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 6 La Clase JFileChooser Un objeto javax.swing.JFileChooser permite seleccionar un arch a través de una GUI JFileChooser elector = new JFileChooser( ); elector.showOpenDialog(null); // se le podria pasar un JFrame JFileChooser elector = new JFileChooser("D:/JavaPrograms/Ch12"); elector.showOpenDialog(null); Para listar un directorio específico más gral String directorioActual = System.getProperty(“user.dir”); JFileChooser elector = new JFileChooser(directorioActual); elector.showOpenDialog(null);

7 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 7 Obtener información de JFileChooser int status = chooser.showOpenDialog(null); // da un entero if (status == JFileChooser.APPROVE_OPTION) { JOptionPane.showMessageDialog(null, “Seleccionó Open"); } else { //== JFileChooser.CANCEL_OPTION JOptionPane.showMessageDialog(null, “Selecionó Cancel"); } File selectedFile = chooser.getSelectedFile();File currentDirectory = chooser.getCurrentDirectory();

8 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 8 obtener nombre y path completo Usando los métodos de la clase File getName() getAbsolutePath()

9 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 9 Cuadro de selección de arch General Otras métodos de JFileChooser showSaveDialog(null) Permite especificar el label del botón y el título showDialog(null, “Compilar”) showOpenDialog y showSaveDialog son casos part. de ésta

10 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 10 Aplicar un filtro a los Arhivos Se puede usar un filtro de archivos (file filter) para restringir el listado de JFileChooser a los archivos y directorios que cumplen el criterio de filtro Para aplicar un filtro, se puede definir una subclase de la clase javax.swing.filechooser.FileFilter y dar los métodos accept y getDescription. public boolean accept(File file) public String getDescription( ) Ver la clase JavaFilter que restringe el listado de los archivos fuente y directorios

11 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 11 Acceso de Bajo Nivel File I/O Para leer o escribir datos a un arch, debemos crear uno de los flujos de objetos y unirlo al arch Un flujo (stream) es una secuencia de items de datos, usualmente 8-bit bytes. Java tiene dos tipos de flujos: de entrada y de salida (input stream y output stream) Un input stream tiene una fuente desde la cual vienen los datos, output stream tiene un destino al cual se envian los datos.

12 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 12 Flujos de bajo nivel File I/O FileOutputStream y FileInputStream objetos que facilitan el acceso al arch FileOutputStream permite sacar una secuencia de bytes FileInputStream permite leer en un arreglo de bytes. FileInputStream  entrada  fuente  sólo 1 Byte FileOutputStream  salida  destino  sólo 1 Byte

13 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 13 Ej: Salida bajo nivel File Output //set up file and stream File outFile = new File("sample1.data"); FileOutputStream outStream = new FileOutputStream( outFile ); //data to save byte[] byteArray = {10, 20, 30, 40, 50, 60, 70, 80}; //write data to the stream outStream.write( byteArray ); //output done, so close the stream outStream.close(); // imprescindible

14 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 14 Ej: Ingreso de bajo nivel //set up file and stream File inFile = new File("sample1.data"); FileInputStream inStream = new FileInputStream(inFile); //Array para introducir los datos de acuerdo a la long int fileSize = (int)inFile.length(); byte[] byteArray = new byte[fileSize]; //read data in and display them inStream.read(byteArray); for (int i = 0; i < fileSize; i++) { System.out.println(byteArray[i]); } //input done, so close the stream inStream.close();

15 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 15 Flujos Alto Nivel File I/O Datos primitivos se convierten a secuencias de bytes FileOutputStream y DataOutputStream se usan para la salida de tipos de datos primitivos FileInputStream and DataInputStream se usan para la entrada de tipos de datos primitivos Para Reconstruir los datos correctamente debemos conocer el orden en el cual los datos fueron almacenados y sus tipos

16 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 16 Establecer DataOutputStream Una secuencia estándar para un objeto DataOutputStream

17 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 17 Ej Salida import java.io.*; class Ch12TestDataOutputStream { public static void main (String[] args) throws IOException {... //set up outDataStream //write values of primitive data types to the stream outDataStream.writeInt(987654321); outDataStream.writeLong(11111111L); outDataStream.writeFloat(22222222F); outDataStream.writeDouble(3333333D); outDataStream.writeChar('A'); outDataStream.writeBoolean(true); //output done, so close the stream outDataStream.close(); }

18 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 18 Establecer un DataInputStream La secuencia estándar para DataInputStream:

19 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 19 Ej Entrada import java.io.*; class Ch12TestDataInputStream { public static void main (String[] args) throws IOException {... //set up inDataStream //read values back from the stream and display them System.out.println(inDataStream.readInt()); System.out.println(inDataStream.readLong()); System.out.println(inDataStream.readFloat()); System.out.println(inDataStream.readDouble()); System.out.println(inDataStream.readChar()); System.out.println(inDataStream.readBoolean()); //input done, so close the stream inDataStream.close(); }

20 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 20 Leer datos en el orden correcto El orden de las operaciones de lectura y escritura deben coincidir para leer y almacenar datos primitivos correctamente

21 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 21 Archivo de Texto entrada y Salida (I/O) En vez de almacenar datos primitivos como datos binarios en un arch, podemos convertirlos y almacenarlos como String Esto permite ver el arch con un editor de texto Para la salida como String de un archivo se usan objetos PrintWriter Para el ingreso de datos a un arch de texto usamos las clases FileReader y BufferedReader –Desde Java 5.0 (SDK 1.5), se puede usar taa la clase Scanner para el ingreso de textfiles

22 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 22 Ej Salida a arch de texto import java.io.*; class Ch12TestPrintWriter { public static void main (String[] args) throws IOException { //set up file and stream File outFile = new File("sample3.data"); FileOutputStream outFileStream = new FileOutputStream(outFile); PrintWriter outStream = new PrintWriter(outFileStream); //write values of primitive data types to the stream outStream.println(987654321); outStream.println("Hello, world."); outStream.println(true); //output done, so close the stream outStream.close(); }

23 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 23 Ej Entrada arch de texto import java.io.*; class Ch12TestBufferedReader { public static void main (String[] args) throws IOException { //Abrir arhivo y flujo File inFile = new File("sample3.data"); FileReader fileReader = new FileReader(inFile); BufferedReader bufReader = new BufferedReader(fileReader); String str; str = bufReader.readLine(); int i = Integer.parseInt(str); //procesar el resto de los datos bufReader.close(); }

24 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 24 Ej ingreso arch de texto con Scanner import java.io.*; class Ch12TestScanner { public static void main (String[] args) throws IOException { //abrir el Scanner Scanner scanner = new Scanner(new File("sample3.data")); //obtener un entero int i = scanner.nextInt(); //procesar el resto de acuerdo al tipo de dato scanner.close(); }

25 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 25 Objecto File I/O Es posible almacenar objetos tan fácilmente como datos primitivos Usamos ObjectOutputStream y ObjectInputStream para guardar y obtener objetos desde un arch. Para grabar objetos de una clase dada, la declaración de la clase debe incluir la cláusula implements Serializable. Ej class Person implements Serializable {... }

26 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 26 Grabando Objetos FileoutFile = new File("objects.data"); FileOutputStream outFileStream = new FileOutputStream(outFile); ObjectOutputStream outObjectStream = new ObjectOutputStream(outFileStream); Person person = new Person("Mr. Espresso", 20, 'M'); outObjectStream.writeObject( person ); account1= new Account(); bank1 = new Bank(); outObjectStream.writeObject( account1 ); outObjectStream.writeObject( bank1 ); Se pueden guardar objetos de distintas clases

27 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 27 Leyendo Objectos FileinFile = new File("objects.data"); FileInputStream inFileStream = new FileInputStream(inFile); ObjectInputStream inObjectStream = new ObjectInputStream(inFileStream); Person person = (Person) inObjectStream.readObject( ); Account account1 = (Account) inObjectStream.readObject( ); Bank bank1 = (Bank) inObjectStream.readObject( ); Se debe leer en el orden correcto El tipo debe ser compatible con el del objeto

28 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 28 Guardando y Cargando Arreglos En vez de procesar los elementos individualmente, se puede guardar y cargar todo el arreglo a la vez Person[] people = new Person[ N ]; //asumir que N tiene un valor //construir el array persona... //grabar el array outObjectStream.writeObject ( people ); //leer el array Person[ ] people = (Person[]) inObjectStream.readObject( );

29 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 29 Problema Escribir una clase que maneje la Entrada y Salida a un archivo del objeto Libro de Direcciones: AddressBook

30 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 30 Desarrollo 1.Implementar el constructor y el método setFile 2.Implementar el método write 3.Implementar el método read 4.Finalizar la clase

31 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 31 Paso 1 Diseño identificar los datos miembros y definir el contructor En vez de almacenar objetos Person, almacenaremos objetos AddressBook usando las técnicas de I/O de Objectos

32 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 32 Paso 1 Código Directory: Chapter12/Step1 Source Files: AddressBookStorage.java TestAddressBookStorage.java Directory: Chapter12/Step1 Source Files: AddressBookStorage.java TestAddressBookStorage.java

33 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 33 Paso 1 Test Incluimos una salida temporal en el método setFile Ejecutar para verificar el funcionamiento de la clase main y verificar que el método setFile se llama en forma correcta

34 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 34 Paso 2 Diseño Diseñar e implementar el método write El dato miembro filename almacena el nombre del archivo que guardará el libro de direcciones Crear un objeto ObjectOutputStream desde el dato miembro filename método write El método write propagará una excepción IOException si fuese disparada

35 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 35 Paso 2 Código Directory: Chapter12/Step2 Source Files: AddressBookStorage.java TestAddressBookWrite.java Directory: Chapter12/Step2 Source Files: AddressBookStorage.java TestAddressBookWrite.java

36 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 36 Paso 2 Test Correr el programa varias veces con diferentes tamaños para el libro de direcciones. Verificar que el arch resultante tenga distintos tamaños. Todavía no podemos verificar si los datos se han grabado en forma correcta

37 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 37 Paso 3 Diseño Diseñar e implementar el método read El método devuelve un objeto AddressBook leido desde un archivo (si no se produce ninguna excepción) El método propagará las excepciones IOException

38 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 38 Paso 3 Código Directory: Chapter12/Step3 Source Files: AddressBookStorage.java TestAddressBookRead.java Directory: Chapter12/Step3 Source Files: AddressBookStorage.java TestAddressBookRead.java

39 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 39 Paso 3 Test Debemos verificar que los datos se puedan leer correctamente. Para verificar la operación de lectura el archivo debe existir Se crea el archivo para realizar el test grabando primero los datos usando la clase TestAddressBookWrite

40 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 40 Paso 4: Finalizar Revisar el programa Correr las pruebas finales


Descargar ppt "©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Capitulo 12 Archivos de Ingreso y Salida."

Presentaciones similares


Anuncios Google