Laboratorio de Programación Entrada/Salida

Anuncio
Laboratorio de Programación
Entrada/Salida (ficheros)
Properties
Dpto. de Ingeniería de Sistemas Telemáticos
http://www.lab.dit.upm.es/~lprg/
febrero 2010
Entrada/Salida
febrero 2010
Entrada/Salida
2
1
Ficheros
Donde se almacenan datos permanentemente
disco duro: C:, $HOME
discos removibles: MP-3, discos USB, ...
Los datos son montones de bits
se pueden interpretar como bytes
de 8 en 8 bits (256 valores)
byte b
se pueden interpretar como caracteres
de 16 en 16 bits (65535 valores)
char c
febrero 2010
Entrada/Salida
3
Ficheros
java.io.File
File fichero= new File(“nombre”);
File fichero= new File(“directorio”, “fichero”);
File fichero= new File(directorio, “fichero”);
métodos útiles
boolean exists()
String getName()
String getPath()
febrero 2010
Entrada/Salida
4
2
Uso de ficheros
Lectura
1.
2.
3.
Escritura
open
read
read
...
close
se abre para leer
se leen porciones
se cierra
1.
2.
3.
open
write
write
...
close
se abre para escribir
se escriben porciones
se cierra
NOTA: si no se cierra,
pueden quedar partes sin guardar
Entrada/Salida
febrero 2010
5
Lectura de bytes
private static final int PORCION= 1024;
String ficheroEntrada= ...
InputStream entrada = new FileInputStream(ficheroEntrada);
byte[] datos = new byte[PORCION];
int nDatos = entrada.read(datos);
while (nDatos > 0) {
// datos [ 0 a nDatos-1 ]
nDatos = entrada.read(datos);
}
entrada.close();
NOTA: aunque se pide leer una PORCION de datos,
puede que se lean menos
febrero 2010
Entrada/Salida
6
3
Escritura de bytes
String ficheroSalida= ...
OutputStream salida = new FileOutputStream(ficheroSalida);
while ( ... ) {
byte[] datos = ...
salida.write(datos);
}
salida.close();
NOTA: si no se cierra,
pueden quedar partes sin guardar
Entrada/Salida
febrero 2010
7
Lectura de caracteres
private static final int PORCION= 1024;
String ficheroEntrada= ...
Reader entrada = new FileReader(ficheroEntrada);
char[] datos = new char[PORCION];
int nDatos = entrada.read(datos);
while (nDatos > 0) {
// datos [ 0 a nDatos-1 ]
nDatos = entrada.read(datos);
}
entrada.close();
NOTA: aunque se pide leer una PORCION de datos,
puede que se lean menos
febrero 2010
Entrada/Salida
8
4
Escritura de caracteres
String ficheroSalida= ...
Writer salida = new FileWriter(ficheroSalida);
while ( ... ) {
char[] datos = ...
salida.write(datos);
}
salida.close();
NOTA: si no se cierra,
pueden quedar partes sin guardar
febrero 2010
Entrada/Salida
9
Lectura de Líneas
1.
2.
3.
4.
Crear un objeto de la clase File
Crear un objeto de la clase FileReader
Crear un objeto de la clase BufferedReader
Utilizar el método readLine() de BufferedReader para leer líneas
import java.io.*;
public class LecturaLineas {
public static void main (String args[]) {
try {
File f = new File (args[0]);
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String linea = null;
while ((linea=br.readLine())!=null) {
System.out.println(linea);
}
fr.close();
}
catch (Exception e) {
}
}
}
febrero 2010
Entrada/Salida
10
5
Entrada/Salida
En Java:
byte = 8 bits (256 valores)
char = carácter Unicode de 16 bits (65535 valores)
import java.io.*;
Caracteres
Bytes
Lectura
Reader
InputStream
Escritura
Writer
OutputStream
febrero 2010
Entrada/Salida
11
Properties
febrero 2010
Entrada/Salida
12
6
¿Qué son?
Los objetos Properties guardan parejas de
Clave -> Valor
“ancho”
“alto”
“colores”
“otra clave”
febrero 2010
“4”
“7”
“5”
“otro valor”
Entrada/Salida
13
Añadir parejas
Properties properties = new Properties();
properties.put (“ancho”,”4”);
properties.put (“alto”,”7”);
properties.put (“colores”,”5”);
properties.put (“otra clave”,”otro valor”);
febrero 2010
Entrada/Salida
14
7
Extraer valores
String v = properties.getProperty(“ancho”);
String w = properties.getProperty(“alto”);
String x = properties.getProperty(“colores”);
febrero 2010
Entrada/Salida
15
Almacenar Properties en un fichero
Con JDK 1.5
void guarda (Properties p, File f)
throws IOException {
OutputStream stream = new FileOutputStream(f);
p.store(stream, “mis parejas”);
Con JDK 1.6
void guarda (Properties p, File f)
throws IOException {
Writer writer = new FileWriter(f);
p.store(writer, “mis parejas”)
febrero 2010
Entrada/Salida
16
8
Cargar Properties de un fichero
Con JDK 1.5
void carga (Properties p, File f)
throws IOException {
InputStream stream = new FileInputStream(f);
p.load(stream);
Con JDK 1.6
void carga(Properties p, File f)
throws IOException {
Reader reader = new FileReader(f);
p.load(reader);
febrero 2010
Entrada/Salida
17
Ejercicio
public class Problema extends Partida
el constructor necesita llamar a super(Tablero)
necesita crear un tablero antes de llamar a super
private static Tablero creaTablero (String)
febrero 2010
Entrada/Salida
18
9
Ejercicio
El método auxiliar…
1. leer el fichero que llega como parámetro
Reader reader = new FileReader (fichero);
Properties properties = new Properties();
properties.load(reader);
2. analizar blancas
cargar(Bando.BLANCAS,
properties.getproperty(“blancas”));
3. analizar negras
febrero 2010
Entrada/Salida
19
Ejercicio
¿Qué hay que hacer en “cargar(…)”?
1. Partir la cadena en trozos
String[] trozo = cadena.split(“,”);
2. Extraer ficha y posición de cada trozo
String que = trozo[i].trim().substring(0, 1);
String donde = trozo[i].trim().substring(1);
3. Crear una pieza y colocarla en el tablero
if (que.equals(“R”)) pieza = new Rey(bando);
posicion = new Posicion(donde);
tablero.setPieza(posicion, pieza);
febrero 2010
Entrada/Salida
20
10
Descargar