Diapositivas de U-tad sobre Entrada/Salida en Java. El Pdf explora el concepto de Input/Output en Java, centrándose en el uso de streams para la gestión de datos y la clase Scanner para la lectura de ficheros, con ejemplos de código para estudiantes universitarios de Informática.
Ver más18 páginas


Visualiza gratis el PDF completo
Regístrate para acceder al documento completo y transformarlo con la IA.
U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL Tema 7. Entrada/Salida en Java Programación Orientada a Objetos Miguel Ángel Mesas Uzal 2022-2023U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 2 Introducción · En Java, las entradas y salidas se representan mediante streams (flujos de datos). · Un stream es una conexión entre el programa y la fuente o el destino de los datos. · La información se transmite en serie por la conexión. . Este concepto permite conceptualizar muchos tipos de comunicaciones: · Lectura y escritura de archivos. · Red. · Sensores. ▪ …U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 3 Clases para la lectura y escritura · Están en el paquete java.io . Hay una jerarquía de clases que opera con bytes y otra que opera con caracteres (2 bytes Unicode). Clases que manejan bytes:
Entrada/Salida en Java 4 Clases para la lectura y escritura Clases que manejan caracteres (recomendadas):
Entrada/Salida en Java 5 Clases para la lectura y escritura · Lo habitual es combinarlas: · Primero una clase de origen o destino . Luego una o varias clases de características. BufferedReader in = new BufferedReader (new FileReader ( "autoexec. bat" ) ) ;U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 6 Los nombres de las clases
| Palabra | Significado |
| InputStream, OutputStream | Lectura/Escritura de bytes |
| Reader, Writer | Lectura/Escritura de caracteres |
| File | Archivos |
| String, CharArray, ByteArray, StringBuffer | Memoria (a través del tipo primitivo indicado) |
| Piped | Tubo de datos |
| Buffered | Buffer |
| Filter | Filtro |
| Data | Intercambio de datos en formato propio de Java |
| Object | Persistencia de objetos |
| Imprimir |
Resumen básico: · Obtener un File de trabajo (lectura/escritura) · Utilizar lectura/escritura bajo diferentes clases especializadas7 Entrada/Salida en Java U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
| Clases | Función que realizan |
| FileReader, File Writer, FileInputStream y FileOutputStream | Son las clases que leen y escriben en archivos de disco. Se explicarán luego con más detalle. |
| StringReader, String Writer, CharArrayReader, CharArrayWriter, ByteArrayInputStream, Byte ArrayOutputStream, StringBufferInputStream | Estas clases tienen en común que se comunican con la memoria del ordenador. En vez de acceder del modo habitual al contenido de un String, por ejemplo, lo leen como si llegara carácter a carácter. Son útiles cuando se busca un modo general e idéntico de tratar con todos los dispositivos que maneja un programa. |
| PipedReader, PipedWriter, PipedInputStream, PipedOutputStream | Se utilizan como un "tubo" o conexión bilateral para transmisión de datos. Por ejemplo, en un programa con dos threads pueden permitir la comunicación entre ellos. Un thread tiene el objeto PipedReader y el otro el PipedWriter. Si los streams están conectados, lo que se escriba en el PipedWriter queda disponible para que se lea del PipedReader. Tambien puede comunicar a dos programas distintos. |
U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 8 Clases que añaden características
| Clases | Función que realizan |
| BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream | Como ya se ha dicho, añaden un buffer al manejo de los datos. Es decir, se reducen las operaciones directas sobre el dispositivo (lecturas de disco, comunicaciones por red), para hacer más eficiente su uso. BufferedReader por ejemplo tiene el método readLine() que lee una línea y la devuelve como un String. |
| InputStreamReader, OutputStreamWriter | Son clases puente que permiten convertir streams que utilizan bytes en otros que manejan caracteres. Son la única relación entre ambas jerarquías y no existen clases que realicen la transformación inversa. |
| ObjectInputStream, ObjectOutputStream | Pertenecen al mecanismo de la serialización y se explicarán más adelante. |
| FilterReader, FilterWriter, FilterInputStream, FilterOutputStream | Son clases base para aplicar diversos filtros o procesos al stream de datos. También se podrían extender para conseguir comportamientos a medida. |
| DataInputStream, DataOutputStream | Se utilizan para escribir y leer datos directamente en los formatos propios de Java. Los convierten en algo ilegible , pero independiente de plataforma y se usan por tanto para almacenaje o para transmisiones entre ordenadores de distinto funcionamiento. |
| PrintWriter, PrintStream | Tienen métodos adaptados para imprimir las variables de Java con la apariencia normal. A partir de un boolean escriben "true" o "false", colocan la coma de un número decimal, etc. |
U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 9 Entrada y salida estándar . Teclado y pantalla se manejan a través de la clase System. . Contiene tres objetos static fundamentales: · System.in · System.out · System.err · Métodos de estos objetos:
| Métodos de System.in | Función que realizan |
| int read() | Lee un carácter y lo devuelve como int. |
| Métodos de System.out y System.err | Función que realizan |
| int print(cualquier tipo) | Imprime en pantalla el argumento que se le pase. Puede recibir cualquier tipo primitivo de variable de Java. |
| int println(cualquier tipo) | Como el anterior, pero añadiendo "In' (nueva linea) al final.10 Entrada/Salida en Java U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL |
Entrada y salida estándar · Se pueden modificar los dispositivos de la entrada y salida estándar: System. setIn (InputStream is) ; System. setOut (PrintStream ps) ; System. setErr (PrintStream ps) ; Estos métodos pueden tener como argumento cualquier clase derivada de InputStream y OutputStream.U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 11 La clase Scanner · Es la forma más sencilla de leer el teclado en Java. Scanner sc = new Scanner(System.in); String cadena = sc. nextLine(); int entero = sc. nextInt(); . Tiene constructores que admiten ficheros y secuencias de bytes, no sólo System.in · Se pueden leer números en una base distinta de la decimal: Scanner sc = new Scanner(System.in); / / Lectura de un número en hexadecimal. int entero = sc.nextInt(16);U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 12 La clase Scanner Admite expresiones regulares como patrones de búsqueda. · Si en el siguiente ejemplo introducimos "11:33:44", obtendremos los números 11, 33 y 44. Scanner sc = new Scanner(System.in); / / Usamos como delimitador el dos puntos, o bien cualquier // espacio/fin de línea (el \\s) sc.useDelimiter("[ : \\s]"); / / Leemos los tres enteros int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); // Obtendremos 11-33-44 de salida. System. out.println(a +"-"+ b +"-"+ c);13 Entrada/Salida en Java U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
La clase Scanner · Tabla de delimitadores:
| abc ... | Letras | |
| 123 ... | Dígitos | |
| \d | Cualquier dígito | |
| \D | Cualquier caracter que no sea un dígito | |
| . | Cualquier caracter | |
| 1. | Coma | |
| [abc] | Solo a, b, o c | |
| [^abc] | Ni a, ni b, ni c | |
| [a-z] | Caracteres de a-z | |
| [0-9] | Numeros de 0-9 | |
| \w | Cualquier caracter alfanumérico | |
| Cualquier caracter no alfanumérico | ||
| {m} | m repeticiones | |
| {m,n} | m a n repeticiones | |
| * | 0 a mas repeticiones | |
| ? | + | una o mas repeticiones |
| Caracter opcional | ||
| \s | Cualquier espacio en blanco | |
| \S | Cualquier caracter no espacio | |
| ^ ... $ | Comienzo y fin | |
| ( ... ) | Capturar un grupo | |
| (a (bc) ) | Capturar un subgrupo | |
| (. * ) | Capturar todo | |
| (ab| cd) | Subgrupo"ab" o "cd"U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL |
Entrada/Salida en Java 14 Scanner para lectura de ficheros - Ejemplo de lectura de un fichero usando la clase Scanner: · Fichero: 1 , Pedro , 33 2, Juan, 44 4, Antonio, 55 · Dato importante: Separado por espacio + coma + espacio15 Entrada/Salida en Java U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Scanner para lectura de ficheros import java. io.File; import java. io.FileNotFoundException; import java.util. Scanner; public class FileScanner { public static void main(String[] args) { //Con un objeto File cargamos el fichero File f = new File("fichero. txt") ; Scanner s; //Es recomendable manejar el error File not Found try { s = new Scanner(f); //Scanner que lee el fichero while (s. hasNextLine()) { //mientras queden lineas hago: String linea = s.nextLine(); //leo siguiente linea Scanner s] = new Scanner(linea); //Scanner para interpretar la linea sl.useDelimiter("\\s*, \\s*"); //Delimitadores espacio+coma+espacio / /Hago tres println porque se que espero tres datos separados por comas System. out.println(sl.next());// System.out.println(sl.next()); System.out.println(sl.next()); s. close(); //Con close cierro el Scanner del archivo } catch (FileNotFoundException e) { //catch que maneja la excepcion si no encuentra el archivo e. printStackTrace () ; }U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 16 Ejercicio Ejercicio 1 . Escribir un programa que cuente cuantas líneas y palabras hay en un texto guardado en un fichero de texto.U -Tad CENTRO UNIVERSITARIO DE TECNOLOGÍA Y ARTE DIGITAL
Entrada/Salida en Java 17 Ejercicios Ejercicio 2 . Realizar un programa que cree un archivo Fich.txt que contenga cinco cadenas de caracteres recibidas desde la consola, una en cada línea.