Publicado el 6 de Junio del 2017
936 visualizaciones desde el 6 de Junio del 2017
292,0 KB
19 paginas
Creado hace 16a (11/05/2009)
UNIVERSIDAD
DE CANTABRIA
Fundamentos de Computadores y
Lenguajes
1. Elementos básicos de los lenguajes
2. Instrucciones de control
3. Tipos de datos
4. Métodos
5. Modularidad y Abstracción
6. Tratamiento de errores
7. Entrada/salida simple
8. Entrada/salida con ficheros
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
4
© Michael González Harbour
11/ma/09
1
Fundamentos de Computadores y
Lenguajes
7. Entrada/salida con ficheros
• 1. Conceptos básicos
• 2. Entrada/salida de texto
• 3. Entrada/salida de texto con formato
• 4. Entrada/salida binaria
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
2
1. Conceptos básicos
La Entrada/Salida de Java se organiza generalmente mediante
objetos llamados Streams
Un Stream es una secuencia ordenada de datos con un
determinado origen o destino
Hay dos tipos de streams:
• de bytes (binarios): están pensados para ser leídos por un
UNIVERSIDAD
DE CANTABRIA
programa
• de caracteres (de texto): están pensados para ser leídos
y/o creados por una persona
En caso de error, muchos de los métodos de los streams lanzan
IOException y otras excepciones
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
3
Uso de los Streams
Los streams se usan encadenados. Por ejemplo:
Binarios
Objeto
Objeto
ObjectOutputStream
ObjectInputStream
bytes
bytes
FileOutputStream
FileInputStream
De Texto:
String
String
PrintWriter
FileWriter
carac-
teres
BufferedReader
FileReader
UNIVERSIDAD
DE CANTABRIA
Fichero
Fichero
Fichero
Fichero
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
4
Jerarquía de clases
ficheros binarios
OutputStream -> escritura de ficheros binarios
• FileOutputStream -> escribe bytes en un fichero
• ObjectOutputStream -> para escribir objetos y variables en un
OutputStream
UNIVERSIDAD
DE CANTABRIA
InputStream -> lectura de ficheros binarios
• FileInputStream -> lee bytes de un fichero
• ObjectInputStream -> lee objetos y variables de un
InputStream
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
5
Jerarquía de clases
ficheros de texto
Reader -> lectura de ficheros de texto Unicode
• FileReader-> lee texto de un fichero
• BufferedReader -> lee texto (línea a línea) de un Reader
Writer -> escritura de ficheros de texto Unicode
• FileWriter-> escribe texto en un fichero
• PrintWriter-> para escribir texto (strings) en un Writer
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
6
Objetos predefinidos
System.out es un objeto de la clase OutputStream que
representa la pantalla
System.in es un objeto de la clase InputStream que representa
el teclado
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
7
2. Entrada/salida de texto
Salida de texto
La salida de texto básica sobre ficheros se consigue con la clase
FileWriter
UNIVERSIDAD
DE CANTABRIA
Descripción
Constructor. Requiere el nombre del
fichero. Lo crea si no existe
Sincronizar
Cerrar
Declaración
FileWriter(String s)
void flush()
void close()
String
PrintWriter
FileWriter
carac-
teres
Fichero
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
8
Salida de texto (cont.)
La salida de texto formateado es más sencilla con un objeto
PrintWriter
UNIVERSIDAD
DE CANTABRIA
Descripción
Constructor. Requiere un Writer
Escribir un string
Escribir un string con retorno de
línea
Sincronizar
Cerrar
Declaración
PrintWriter(Writer writer)
void print(String str)
void println(String str)
void flush()
void close()
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
9
Ejemplo:
Programa que escribe en un fichero de texto números enteros y
reales
UNIVERSIDAD
DE CANTABRIA
import java.io.*;
public class EscribeTexto {
public static void main(String[] args) {
int i=1, j=2, k=3;
double x=1.0,y=6.023e23;
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
10
Ejemplo:
UNIVERSIDAD
DE CANTABRIA
try {
FileWriter fich = new FileWriter("d1.txt");
PrintWriter sal = new PrintWriter(fich);
try {
sal.println("Enteros "+i+" "+j+" "+k);
sal.println("Reales "+x+" "+y);
} finally {
sal.close();
fich.close();
} // try
} catch (IOException e) {
System.out.println("Error "+e);
} // try
} // main
} // clase
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
11
Fichero generado
Enteros 1 2 3
Reales 1.0 6.023E23
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
12
Entrada de texto
La entrada de texto básica sobre ficheros se consigue con la clase
FileReader, cuyas operaciones son:
UNIVERSIDAD
DE CANTABRIA
Descripción
Declaración
Constructor. Requiere el nombre del
fichero. Si no existe lanza
FileNotFoundException
Cerrar
FileReader(String s)throws
FileNotFoundException
void close()
String
BufferedReader
FileReader
carac-
teres
Fichero
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
13
Entrada de texto (cont.)
La entrada de texto es más difícil que la salida
Se puede utilizar la clase BufferedReader: para leer texto línea a
línea
UNIVERSIDAD
DE CANTABRIA
Descripción
Declaración
Constructor. Requiere Un Reader. BufferedReader(Reader reader)
Leer un string. Retorna null si
se ha llegado al final
Cerrar
String readLine()
void close()
Luego, cada línea leída se convierte a otros datos con las
operaciones parseInt(), parseDouble(), etc.
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
14
UNIVERSIDAD
DE CANTABRIA
Ejemplo
Leer parejas de texto (una línea) y número (otra línea) y escribirlas
en pantalla; ejemplo de fichero de entrada:
primero
1.0
segundo
3.0
tercero
4.5
cuarto
8.0
quinto
34R.5
sexto
1.0
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
15
Ejemplo (cont.)
import java.io.*;
public class LeeStrings {
UNIVERSIDAD
DE CANTABRIA
/**
* Programa que lee varias parejas de textos y
* números de un fichero de texto
*/
public static void main(String[] args) {
String str,num;
double x;
int sep=0;
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
16
Ejemplo (cont.)
UNIVERSIDAD
DE CANTABRIA
try {
FileReader fich = new FileReader("d2.txt");
BufferedReader ent = new BufferedReader(fich);
try {
do {
// leer el texto
str=ent.readLine();
if (str!=null) {
// si hay texto escribirlo
System.out.println("Texto: "+str);
// leer el número real como texto
num=ent.readLine();
if (num==null || num.equals("")) {
System.out.println("Falta el nº");
} else {
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
17
Ejemplo (cont.)
UNIVERSIDAD
DE CANTABRIA
// convertir el texto a numero
try {
x=Double.parseDouble(num);
System.out.println("Numero:"+x);
} catch (NumberFormatException e) {
System.out.println ("Error al”+
“leer numero real: "+num);
} // try
} // if
} // if
} while (str!=null);
} finally {
ent.close();
fich.close();
} // try
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
18
Ejemplo (cont.)
UNIVERSIDAD
DE CANTABRIA
} catch (IOException e) {
System.out.println("Error "+e);
} // try
} // main
} // clase
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
19
UNIVERSIDAD
DE CANTABRIA
Salida para el ejemplo
El programa muestra lo siguiente en la pantalla:
Texto: primero
Numero: 1.0
Texto: segundo
Numero: 3.0
Texto: tercero
Numero: 4.5
Texto: cuarto
Numero: 8.0
Texto: quinto
Error al leer numero real: 34R.5
Texto: sexto
Numero: 1.0
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
20
UNIVERSIDAD
DE CANTABRIA
3. Entrada/Salida de texto con
formato
La clase PrintWriter dispone de una operación de salida de
texto con formato, llamada printf
• el objeto System.out que representa la pantalla, también
• está copiada del lenguaje C
• el primer parámetro es el string de formato
• luego viene un número variable de parámetros
Ejemplo
System.out.printf
("%s de %3d años", nombre, edad);
Produce la salida (suponiendo nombre="Pedro", edad=18)
Pedro de 18 años
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
21
String de formato
Contiene caracteres que se muestran tal cual
• y especificaciones de formato que se sustituyen por los
sucesivos parámetros
UNIVERSIDAD
DE CANTABRIA
Especificaciones de formato más habituales:
%d enteros
%c caracteres
%s string
%f float y double, coma fija
%e float y double, notación exponencial
%g float y double, exponencial o coma fija
%n salto de línea en el formato del sist. operat.
%% el carácter %
DEPARTAMENTO DE MATEMÁTICAS,
ESTADÍSTICA Y COMPUTACIÓN
© Michael González Harbour
11/ma/09
22
String de formato
Puede lanzarse IllegalFormatException si el formato no
corresponde al parámetro
Después del carácter % se pue
Comentarios de: Fundamentos de Computadores y Lenguajes - 8. Entrada/salida con ficheros (0)
No hay comentarios