24
Flujos de Entrada y salida M.C. Yolanda Moyao Martínez paquete java.io

Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Flujos de Entrada y salida

M.C. Yolanda Moyao Martínez

paquete java.io

Page 2: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Los flujos surgen por la necesidad de las aplicaciones Java de interaccionar con el exterior de dos formas diferentes:1. Generando salida a la consola del DOS, a un

fichero, etc.

2. Capturando datos procedentes del teclado, de ficheros, de páginas web, teclado, etc.

System.inSystem.out

Page 3: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Flujos de caracteres- char (16-bit): Ideal para trabajar con texto plano.

Clases abstractas Reader y Writer de las cuales heredan otras sub-clases que implementan en formas mas concretas la misma tarea.

Page 4: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Flujo de E/S char Unicode

Clases Abstractas

Page 5: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Flujos binarios – byte (8-bit): Permite trabajar adecuadamente con datos binarios tales como archivos de imagen, sonido, etc.

Clases abstractas InputStream y OutputStream

de las cuales heredan otras sub-clases que implementan en formas mas concretas la

misma tarea.

Page 6: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()
Page 7: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

import java.io.*;

public class SumaDatosTeclado{

public static void main (String[] args)throws IOException{

// crea flujo para leer datos

InputStreamReader isr=new InputStreamReader(System.in);

//creación del filtro para optimizar la lectura de datos

BufferedReader br=new BufferedReader(isr);

System.out.print("dame el primer número ");

//Lectura mediante el método readLine()

String texto1=br.readLine();

//conversión a int de la String

int num1=Integer.parseInt(texto1);

System.out.print("dame el segundo número ");

String texto2=br.readLine();

int num2=Integer.parseInt(texto2);

//sumar los 2 enteros

System.out.println("Suma de " + num1 + " y " + num2 + " es " +(num1+num2)); } }

Solo tiene el método readLine()

Page 8: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Clase File Para poder realizar operaciones de información sobre archivos.

Un objeto File representa un archivo o un directorio y sirve para obtener información (permisos, tamaño,…).

También sirve para navegar por la estructura de archivos.

Java.io

50 clases10 interfaces15 excepciones

Page 9: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Utiliza como único argumento una cadena que representa una ruta en el sistema de archivo.

Ejemplo:

File archivo1=new File(“/datos/bd.txt”);

File carpeta=new File(“datos”);

Page 10: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

boolean isFile() Devuelve true si el objeto File es un archivo y false si es carpeta o si no existe. boolean renameTo(File f2) Cambia el nombre del archivo por el que posee el archivo pasado como argumento. Devuelve true si se pudo completar la operación. boolean delete() Borra el archivo y devuelve true si puedo hacerlo.long length() Devuelve el tamaño del archivo en bytes (en el caso del texto devuelve los caracteres del archivo) boolean createNewFile() throws IOException Crea un nuevo archivo basado en la ruta dada al objeto File.

Page 11: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

static File createTempFile( String prefijo, String sufijo) throws IOException. Crea un objeto File de tipo archivo temporal con el prefijo y sufijo indicados. static File createTempFile( String prefijo, String sufijo, File directorio) Igual que el anterior, pero utiliza el directorio indicado. void deleteOnExit() Borra el archivo cuando finaliza la ejecución del programa

Page 12: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

En el caso de las excepciones, todas las que provocan las excepciones de E/S son derivadas de IOException o de sus derivadas.

Además son habituales ya que la entrada y salida de datos es una operación crítica.

La mayoría de operaciones deben ir inmersas en un try.

IOException

Page 13: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

String toString() Para obtener la cadena descriptiva del objetoboolean exists() Devuelve true si existe la carpeta o archivo.boolean canRead() Devuelve true si el archivo se puede leer boolean canWrite() Devuelve true si el archivo se puede

escribirboolean isHidden() Devuelve true si el objeto File es oculto boolean isAbsolute() Devuelve true si la ruta indicada en el

objeto File es absoluta.boolean equals(File f2) Compara f2 con el objeto File y

devuelve verdadero si son iguales. int compareTo(File f2) Compara basado en el orden alfabético

del texto (sólo funciona bien si ambos archivos son de texto) f2 con el objeto File y devuelve cero si son iguales, un entero negativo si el orden de f2 es mayor y positivo si es menor

Page 14: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

import java.io.*;

public class Writer1 {

public static void main (String[] args){

try{ // Pueden ocurrir excepciones

boolean newFile = false;

File file = new File("fileWrite1.txt"); // Solo es un objeto

System.out.println(file.exists()); // ¿existe?

newFile = file.createNewFile(); // se puede crear el archivo

System.out.println(newFile); // ¿existe?

System.out.println(file.exists()); // Comprobamos si existe

}

catch(IOException e){ System.out.println(“error ”);}

}

}

falsetruetrue

Process completed.

Page 15: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

void close() Cierra la corriente de entrada. Cualquier acceso posterior generaría una IOException.

void mark(int bytes) Marca la posición actual en el flujo de datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina.

boolean markSupported() Devuelve verdadero si en la corriente de entrada es posible marcar mediante el método mark.

int read() Lee el siguiente byte de la corriente de entrada y le almacena en formato de entero. Devuelve -1 si estamos al final del fichero.

int read(byte[] búfer) Lee de la corriente de entrada bytes y les almacena en el búfer. Lee hasta llenar el búfer.

Page 16: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

void close() Cierra la corriente de salida. Cualquier acceso posterior generaría una IOException.

void flush() Vacía los búferes de salida de la corriente de datos.

void write(int byte) Escribe un byte en la corriente de salida.

void write(byte[] bufer) Escribe todo el array de bytes en la corriente de salida.

void write( byte[] buffer, int posInicial, int numBytes ) Escribe el array de bytes en la salida, pero empezando por la posición inicial y sólo la cantidad indicada por numBytes.

Page 17: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

La construcción de objetos del tipo FileReader se hace con un parámetro que puede ser un objeto File o un String que representarán a un determinado archivo.

La construcción de objetos FileWriter se hace igual sólo que se puede añadir un segundo parámetro booleano que, si es true, archivo para añadir datos; en caso contrario archivo para grabar desde cero (se borraría su contenido).

Page 18: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

import java.io.*;

class Writer2{

public static void main (String[] args){

char[] in = new char[50]; // Para guardar la entrada

int size = 0;

try {

File file = new File("fileWrite2.txt"); // Solo es un objeto

FileWriter fw = new FileWriter(file); // Creamos un fichero actual y un objeto FileWriter

fw.write("saludos todos\n"); // Escribimos caracteres en el fichero

fw.flush(); // Limpiamos el buffer

fw.close(); // Cerramos el archivo cuando todo ha terminado

FileReader fr = new FileReader(file); // Creamos un objeto FileReader

size = fr.read(in); // Leemos el archivo entero

System.out.println(size + " "); // Cantidad de bytes leidos

for (char c : in){

System.out.print(c); // Imprimimos el array}

fr.close(); // siempre cerramos para liberar recursos

}catch(IOException ex){ } } }

14 saludos todos

Process completed.

Page 19: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

La clase BufferedReader aporta el método readLine que permite leer caracteres hasta la presencia de null o del salto de línea.

La clase BufferedWriter escribe relativamente grandes cantidades de información a un archivo. Provee un método llamado newLine() el cual crea separadores de línea específicos de la plataforma de manera automática.

Page 20: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

import java.io.*; //Importamos todas las clases de java.io.

public class FicheroTextoBufferedApp {

public static void main(String[] args) throws IOException {

try(BufferedReader br=new BufferedReader(new FileReader("fichero1.txt"));

BufferedWriter bw=new BufferedWriter(new FileWriter("fichero1.txt"));){

//Escribimos en el fichero

bw.write("Esto es una prueba usando Buffered");

bw.newLine();

bw.write("Seguimos usando Buffered");

//Guardamos los cambios del fichero

bw.flush();

//Leemos el fichero y lo mostramos por pantalla

String linea=br.readLine();

while(linea!=null){

System.out.println(linea);

linea=br.readLine();

}

}catch(IOException e){

System.out.println("Error E/S: "+e); } } }

Page 21: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Boolena isDirectory() Devuelve true si el objeto File es una carpeta y false si es un archivo o si no existe. boolean mkdir() Intenta crear una carpeta y devuelve true si fue posible hacerlo boolean mkdirs() Usa el objeto para crear una carpeta con la ruta creada para el objeto y si hace falta crea toda la estructura de carpetas necesaria para crearla. boolean delete() Borra la carpeta y devuelve true si puedo hacerlo String[] list() Devuelve la lista de archivos de la carpeta representada en el objeto File. static File[] listRoots() Devuelve un array de objetos File, donde cada objeto del array representa la carpeta raíz de una unidad de disco. File[] listfiles() Igual que la anterior, pero el resultado es un arrayde objetos File.

Page 22: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

import java.io.*;

//import java.io.IOException;

class ClaseDir{

public static void main (String[] args)throws IOException{

File myDir = new File("myDir"); // asignamos un directorio

myDir.mkdir(); //crear directorio

System.out.println(myDir.isDirectory()); //¿Existe?

File myFile = new File(myDir, "myFile.txt"); // Asignamos el fichero

myFile.createNewFile(); // creamos fichero

System.out.println(myFile.isFile()); // ¿existe?

FileReader fr = new FileReader(myFile);

BufferedReader br = new BufferedReader(fr); // creamos un Reader

String s;

while ((s = br.readLine()) != null) { // Leemos información

System.out.println(s);

}

br.close(); } }

truetrue

Process completed.

Page 23: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

import java.io.*;

//import java.io.IOException;

class ClaseDir{

public static void main (String[] args)throws IOException{

File existingDir = new File("existingDir"); // asignamos un directorio

System.out.println(existingDir.isDirectory()); //¿Existe directorio?

File existingDirFile = new File(existingDir, "existingDirFile.txt"); // Asignamos el fichero

System.out.println(existingDirFile.isFile()); //¿Existe archivo?

FileReader fr = new FileReader(existingDirFile);

BufferedReader br = new BufferedReader(fr); // creamos un Reader

String s;

while ((s = br.readLine()) != null) { // Leemos información

System.out.println(s);

}

br.close();

}

}

truetruehola

Process completed.

Page 24: Flujos de Entrada y salidaymoyao.cs.buap.mx/admin/archivos/FlujosESP12Progra2.pdf · datos de entrada. Cuando se lea el número de bytes indicado, la marca se elimina. boolean markSupported()

Hacer un programa que permita leer 3 calificaciones para 40 estudiantes que serán enviadas a un archivo, posteriormente del archivo serán leídas para calcular el promedio de cada estudiante que serán enviadas a un archivo de promedios calculados.