t16 - ficheros

16
Tema 16 Ficheros

Upload: daniel-santiago-martinez

Post on 08-Jul-2015

486 views

Category:

Education


1 download

DESCRIPTION

Gestión de ficheros en Java

TRANSCRIPT

Page 1: T16 - Ficheros

Tema – 16Ficheros

Page 2: T16 - Ficheros

16.1. Introducción

• Un fichero es un objeto abstracto sobre el cual se puede leer y escribir información. Para nuestros programas representará un mecanismo para almacenar de forma permanente ciertos datos.

• Java ofrece diversas clases para trabajar con los ficheros. Utilizaremos unas u otras en función de cómo trabajemos con el fichero.

PROGRAMACIÓN 2

Page 3: T16 - Ficheros

16.1. Introducción

• En Java podemos trabajar con dos tipos de ficheros:– Ficheros de texto: compuestos de caracteres

legibles.

– Ficheros binarios: pueden almacenar cualquier tipo de datos (int, float, boolean…).

• Hay dos tipos de acceso a los ficheros:– Secuencial.

– Aleatorio.

PROGRAMACIÓN 3

Page 4: T16 - Ficheros

16.2. Clases Java para ficheros

• La clase File nos proporciona información acerca de los ficheros. Los métodos para crear un fichero son:

– File (String path)

– File (String path, String name)

– File (File dir, String name)

• “path” es la ruta al fichero, “name” es el nombre.

PROGRAMACIÓN 4

Page 5: T16 - Ficheros

16.2. Clases Java para ficheros

• Otros métodos útiles de la clase File son:– boolean exists(): nos indica si un fichero existe.– long length(): nos indica la longitud del fichero

(contenido).– boolean delete(): borra el fichero (true si lo

borra, false si no).– boolean canRead(): indica si se puede leer del fichero.– boolean canWrite(): indica si se puede escribir en el

fichero.

• En la especificación de la clase File se pueden ver todos su métodos.

PROGRAMACIÓN 5

Page 6: T16 - Ficheros

16.2. Clases Java para ficheros

• Las clases que ofrece Java para leer y escribir en ficheros son:– FileOutputStream: para trabajar con ficheros de

salida de texto con acceso secuencial.

– FileInputStream: para trabajar con ficheros de entrada de texto con acceso secuencial.

– RandomAccessFile: para trabajar con ficheros de entrada o salida binarios con acceso aleatorio.

• Usaremos alguna de estas clases junto con la clase File vista anteriormente.

PROGRAMACIÓN 6

Page 7: T16 - Ficheros

16.3. Operaciones con ficheros

• Las operaciones que realizaremos al trabajar con ficheros serán las siguientes:

– Abrir el fichero.

• Debemos tener en cuenta el modo en que trabajaremos con el fichero.

– Usar el fichero.

• Realizaremos las operaciones de lectura/escritura deseadas.

– Cerrar el fichero.

• No es esencial, ya que el recolector de basura de Java lo cerrará por nosotros, pero es aconsejable.

PROGRAMACIÓN 7

Page 8: T16 - Ficheros

16.3. Operaciones con ficheros

• Abrir el fichero:

– FileOutputStream fos= new FileOutputStream(fichero);

• Para añadir información al final del fichero escribieremos: FileOutputStream fos= new FileOutputStream (fichero, true);

– FileInputStream fis= new FileInputStream (fichero);

– RandomAccessFile raf= new RandomAccessFile(fichero, modo);

• MODO: r (sólo lectura), rw (lectura y escritura).

PROGRAMACIÓN 8

Page 9: T16 - Ficheros

16.3. Operaciones con ficheros

• Usar el fichero con FileOutputStream:

– int write (int b): escribe un byte en el fichero.

– int write (byte[] b): escribe un conjunto de bytes en el fichero.

– int write (byte[] b, int off, int len): escribe un total de “len” bytes del vector, empezando por la posición “off”.

– void close(): cierra el fichero.

PROGRAMACIÓN 9

Page 10: T16 - Ficheros

16.3. Operaciones con ficheros

• Usar el fichero con FileInputStream:– int read (): lee un byte del fichero. Devuelve el

byte leído o -1 si es el final del fichero.

– int read(byte*+ b): lee hasta “b.length” bytes de un fichero, guardándolos en “b”. Devuelve el número total de bytes leídos o -1 si es el final del fichero.

– int read(byte[] b, int off, int len): lee hasta un total de “len” bytes del vector, empezando por la posición off.

– void close(): cierra el fichero.

PROGRAMACIÓN 10

Page 11: T16 - Ficheros

16.3. Operaciones con ficheros

• Podemos usar las clases DataOutputStream y DataInputStream junto con FileOutputStreamy FileInputStream. Las dos primeras nos ofrecen más métodos para la entrada y salida de datos.

– DataInputStream: short readShort(), intreadInt(), float readFloat(), String readLine()…

– DataOutpurStream: void writeShort(short dato), …

PROGRAMACIÓN 11

Page 12: T16 - Ficheros

16.3. Operaciones con ficheros

• Usar el fichero con RandomAccessFile:

– boolean readBoolean(): lee un booleano del fichero.

– char readChar(): lee un carácter del fichero.

– double readDouble(): lee un double del fichero.

– int readInt(): lee un entero del fichero.

– String readLine(): lee la siguiente línea del fichero.

(continúa)

PROGRAMACIÓN 12

Page 13: T16 - Ficheros

16.3. Operaciones con ficheros

• Usar el fichero con RandomAccessFile:– void writeBoolean(boolean v): escribe un booleano en

el fichero.– void writeChar(int v): escribe un carácter en el fichero.– void writeDouble(double v): escribe un double en el

fichero.– void writeInt(int v): escribe un entero en el fichero.– void writeBytes(String s): escribe una cadena de

caracteres en el fichero.

(continúa)

PROGRAMACIÓN 13

Page 14: T16 - Ficheros

16.3. Operaciones con ficheros

• Usar el fichero con RandomAccessFile:– long length(): devuelve la longitud del fichero.

– void setLength(long newLength): establece el tamaño del fichero. Útil para borrar.

– long getFilePointer(): devuelve la posición actual en el fichero.

– void seek(long pos): coloca el puntero del fichero en la posición “pos”. El fichero siempre empieza en la posición 0.

– int skipBytes(int n): intenta saltar “n” bytes desde la posición actual.

PROGRAMACIÓN 14

Page 15: T16 - Ficheros

16.3. Operaciones con ficheros

• Ejemplo de lectura de un archivo:File archivo = new File (“C:\\test.txt”);if(archivo.exists()){

RandomAccessFile raf = new RandomAccessFile (archivo,“r”);String linea = raf.readLine();//Cuando lleguemos al final del archivo linea será igual a nullwhile(linea!=null){

System.out.println(linea);linea = raf.readLine();

}raf.close();

}else{System.out.println(“El archivo no existe.”);

}

PROGRAMACIÓN 15

Page 16: T16 - Ficheros

16.3. Operaciones con ficheros

• Ejemplo de escritura de un archivo:File archivo = new File (“C:\\test.txt”);if(archivo.exists()){

RandomAccessFile raf = new RandomAccessFile (archivo,“rw”);raf.seek(raf.length());// La línea anterior posiciona el cursor al final del archivo para conservar su // contenido sin sobreescribirraf.writeBytes(“Hola”); //Escribo una cadena de caracteresraf.writeInt(10); //Escribo un enteroraf.writeBoolean(true); //Escribo un booleanoraf.writeDouble(2.4); //Escribo un doubleSystem.getProperty("line.separator") //Escribo un salto de linearaf.close();

}else{System.out.println(“El archivo no existe.”);

}

PROGRAMACIÓN 16