archivos java 2013

30
STREAMS: ARCHIVOS EN JAVA Programación II

Upload: cceron2008

Post on 16-Sep-2015

265 views

Category:

Documents


9 download

TRANSCRIPT

  • STREAMS: ARCHIVOS EN JAVAProgramacin II

  • ARCHIVOSUn archivo es un grupo de datos estructurados que son almacenados en algn medio de almacenamiento y pueden ser usados por las aplicaciones (programas). La forma en que una computadora organiza, da nombre, almacena y manipula los archivos se denomina sistema de archivos y suele depender del Sistema Operativo y del medio de almacenamiento (disco duro, disco externo, memorias USB, etc)

  • Usar Archivos tres pasos:Cuando hablamos de manejo de archivos, tenemos que tener en cuenta 3 pasos:Abrir el archivo.Realizar la operacin deseada: leer y/o escribir datos en el archivo.Cerrar el archivo.

  • Cmo abrir archivos en Java?La E/S con archivos queda disponible al utilizar las siguientes declaraciones:BufferedReader fileIn =new BufferedReader(new FileReader(nombredearchivo));PrintWriter fileOut =new PrintWriter(new FileWriter(nombredearchivo));PrintWriter fileApnd =new PrintWriter(new FileWriter(nombredearchivo, true);

  • La utilizacin de objetos de E/S con archivosExisten dos reas que requieren atencin adicional cuando manejamos E/S con archivos: La inicializacin de los objetos de E/S con archivos, puede ser una tarea no tan exitosa.Puede ser que archivo que se desea abrir no encuentre, lo cual lanza la excepcin FileNotFoundException. Esto podrar ser porque la cadena entregada al constructor puede ser el nombre de un archivo inexistente o que no se encuentra en el directorio de trabajo del programa. Al momento de leer o escribir a un archivo se puede lanzar la excepcin IOException.

  • Lectura y Escritura de archivos de textoClase File En el paquete java.io se encuentra la clase File pensada para poder realizar operaciones de informacin sobre archivos. No proporciona mtodos de acceso a los archivos, sino operaciones a nivel de sistema de archivos (listado de archivos, crear carpetas, borrar ficheros, cambiar nombre, etc)Clase FileReader La clase FileReader permite leer caracteres, se usa para leer el contenido de un archivo de texto. Clase FileWriter La clase FileWriter permite escribir caracteres, se usa para escribir texto en un archivo de texto. Clase BufferedReader La clase BufferedReader es muy usada para leer archivos de texto plano que contenga informacin que el programa puede usar. Clase PrintWriter La clase PrintWriter se utiliza para escribir en archivos de texto. La apertura de archivos y su posterior lectura pueden lanzar excepciones que debemos capturar. Por ello, la apertura y la lectura deben meterse en un bloque try-catch. Adems, el fichero hay que cerrarlo cuando trminos.

  • Problema 1- Guardar en Archivo Leer lneas que terminan con la palabra fin y grabarlas en un archivo en disco de nombre archivo.txt.

  • import java.io.*;

    public class CrearArchivo{

    public static void main(String[]args) throws IOException {

    InputStreamReader entrada = new InputStreamReader(System.in); BufferedReader br=new BufferedReader(entrada);

    PrintWriter a=new PrintWriter(new FileWriter("archivo.txt")); System.out.println("Escribe nmeros enteros y termina con fin"); while(true) { String linea=br.readLine(); if( linea.equals("fin") ) break; a.println(linea);}a.close();}}

  • Problema 2- Leer de Archivo a Pantallaimport java.io.*;public class LeerArchivo { static public void main(String[]args) throws IOException{ BufferedReader a = new BufferedReader( new FileReader("archivo.txt")); while(true){ String linea=a.readLine(); if(linea==null) break; System.out.println ("Numeros leidos del Archivo"); System.out.println(linea); } a.close();}}

  • Solucin 2. usando expresin idiomtica para leer hasta el final del archivo

    import java.io.*;

    class LeerArchivo{

    static public void main(String[]args)

    throws IOException

    {

    BufferedReader a = new BufferedReader(

    new FileReader(archivo.txt));

    String linea;

    while((linea=a.readLine())!=null)

    System.out.println(linea);

    a.close();

    }

    }

  • Ejemplo 2 -de lectura de un archivo de textoVisualizar todos los datos que se encuentran en el archivo de texto numeros.txt que se encuentra en la unidad e: en la carpeta archivos import java.io.*;public class archivos1 { public static void main(String[] args) {File f=new File("e:\\archivos/numeros.txt"); //carga archivoFileReader fr; try { fr=new FileReader(f); // fr , crea el flujo hacia f BufferedReader br=new BufferedReader(fr); //leerString linea=br.readLine(); //por linea

  • Ejemplo de lectura de un archivo de texto (2)while(linea!=null) // mientras haya datos en el archivo{ linea=br.readLine(); System.out.println(linea); } fr.close(); // cierra el archivo } catch(IOException e) { System.out.println("error"); // si no se pudo accede al archivo} }}

  • Ejemplo de Escritura de un archivo de textoEn el siguiente ejemplo se escriben en el archivo de texto numeros.txt que se encuentra en la unidad e: en la carpeta trabajos-archivos. Los nmeros de 1 al 50

  • Ejemplo de entrada de datos desde un archivo y escritura a otro archivo Programa que lee el archivo entrada.txt donde se encuentran nmeros y escribe en el archivo salida.txt donde escribe sus correspondientes factoriales

  • Explicaciones

    1. import java.io.*;

    Inserta (deja disponibles) clases predefinidas para leer y escribir archivos

    clases PrintWriter y FileWriter para escribir archivos

    clases BufferedReader y FileReader para leer archivos

    2. throws IOException

    indica que si se produce una excepcin (error) de lectura/escritura (falla al leer o escribir),

    se muestra un mensaje y se aborta (termina) el programa

  • 3. PrintWriter a=new PrintWriter(...);

    a: objeto en memoria de clase PrintWriter que representa al archivo (y contiene sus principales caractersticas: ubicacin, tamao, cursor, etc)

    archivo.txt: nombre externo del archivo (en el disco).

    El sufijo .txt se usa para archivos que contienen texto (caracteres).

    abre (prepara, inicializa) archivo para escritura

    si archivo no existe, se crea, y si ya existe, se regraba

    ubica el cursor del archivo al comienzo del espacio asignado (para grabacin de informacin)

  • 4. a.println(linea)

    escribe (graba) una lnea en el archivo

    graba caracteres del string

    graba una marca de fin de lnea

    (carcter especial newline o \n)

    ubica cursor despus de newline

    Ejemplo:

    a.println(hola como ests);

  • 5. a.close()

    cierra el archivo

    graba marca de fin de archivo (eof)

    libera recursos (memoria) asociada al objeto a

    objeto a queda indefinido

    ejemplo:

    a.println(chao); a.close();

    chao\nX

    X : marca de fin de archivo (distinta a cualquier carcter)

  • Explicaciones

    1. BufferedReader a=new BufferedReader(...);

    a: objeto de clase BufferedReader que representa al archivo

    abre (prepara, inicializa) archivo para lectura

    si archivo no existe, aborta

    si existe, ubica el cursor al comienzo del archivo

    2. a.close()

    cierra el archivo

    si se omite, se cierra al terminar programa

  • ARCHIVOS ALEATORIOS

  • ARCHIVOS DE ACCESO ALEATORIOA menudo, no se desea leer un fichero de principio a fin; sino acceder al fichero como una base de datos, donde se salta de un registro a otro; cada uno en diferentes partes del fichero. Java proporciona una clase RandomAccessFile para este tipo de entrada/salida

  • Creacin de un Fichero de Acceso AleatorioHay dos posibilidades para abrir un fichero de acceso aleatorio:Con el nombre del fichero: miRAFile = new RandomAccessFile( String nombre,String modo );Con un objeto File:miRAFile = new RandomAccessFile( File fichero,String modo );

    El argumento modo determina si se tiene acceso de slo lectura (r) o de lectura/escritura (r/w). Por ejemplo, se puede abrir un fichero de una base de datos para actualizacin:RandomAccessFile miRAFile;miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" );

  • Acceso a la InformacinLos objetos RandomAccessFile esperan informacin de lectura/escritura de la misma manera que los objetos DataInput/DataOutput. Se tiene acceso a todas las operaciones read() y write() de las clases DataInputStream y DataOutputStream.Tambin se tienen muchos mtodos para moverse dentro de un fichero:long getFilePointer();Devuelve la posicin actual del puntero del fichero void seek( long pos );Coloca el puntero del fichero en una posicin determinada. La posicin se da como un desplazamiento en bytes desde el comienzo del fichero. La posicin 0 marca el comienzo de ese fichero. long length();Devuelve la longitud del fichero. La posicin length() marca el final de ese fichero.

  • Actualizacin de InformacinSe pueden utilizar ficheros de acceso aleatorio para aadir informacin a ficheros existentes:miRAFile = new RandomAccessFile( "/tmp/kk.log","rw" );miRAFile.seek( miRAFile.length() );// Cualquier write() que hagamos a partir de este punto del cdigo aadir informacin al fichero

  • import java.io.*;// Cada vez que ejecutemos este programita, se incorporara una nueva// linea al fichero bin que se crea la primera vez que se ejecuta//class CrearModificarArchivo {public static void main( String args[] ) throws IOException {RandomAccessFile miRAFile;String s = "Informacion adicional al archivo";// Abrimos el fichero de acceso aleatoriomiRAFile = new RandomAccessFile( "/archivo.bin","rw" );// Nos vamos al final del ficheromiRAFile.seek( miRAFile.length() );// Incorporamos la cadena al ficheromiRAFile.writeBytes( s );// Cerramos el ficheromiRAFile.close();}}

  • /Genera numeros aleatoriosimport java.io.*;

    class Aleatorio{public static void main(String argv[])throws IOException{String nombre;FileOutputStream arch=new FileOutputStream("hola.txt");double ran,total=0;FileOutputStream inarch =new FileOutputStream("hola1.txt");for (int i=0;i