T16 - Ficheros

817 views

Published on

Gestión de ficheros en Java

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
817
On SlideShare
0
From Embeds
0
Number of Embeds
63
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

T16 - Ficheros

  1. 1. Tema – 16 Ficheros
  2. 2. 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
  3. 3. 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
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. 16.3. Operaciones con ficheros• Podemos usar las clases DataOutputStream y DataInputStream junto con FileOutputStream y FileInputStream. Las dos primeras nos ofrecen más métodos para la entrada y salida de datos. – DataInputStream: short readShort(), int readInt(), float readFloat(), String readLine()… – DataOutpurStream: void writeShort(short dato), …PROGRAMACIÓN 11
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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 null while(linea!=null){ System.out.println(linea); linea = raf.readLine(); } raf.close(); }else{ System.out.println(“El archivo no existe.”); }PROGRAMACIÓN 15
  16. 16. 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 sobreescribir raf.writeBytes(“Hola”); //Escribo una cadena de caracteres raf.writeInt(10); //Escribo un entero raf.writeBoolean(true); //Escribo un booleano raf.writeDouble(2.4); //Escribo un double System.getProperty("line.separator") //Escribo un salto de linea raf.close(); }else{ System.out.println(“El archivo no existe.”); }PROGRAMACIÓN 16

×