dissabte, 23 de gener del 2016

Lectura de ficheros en Java


Los programas usan variables para almacenar información:
  • Los datos de entrada.
  • Los resultados calculados.
  • Los valores intermedios generados a lo largo del cálculo. 
Toda esta información es efímera: cuando acaba el programa, todo desaparece. Pero para muchas aplicaciones, será importante poder almacenar datos de manera permanente.
Un archivo o fichero lo podriamos definir como:
"Un conjunto de bits almacenados en un dispositivo, y accesible a través de un camino de acceso (pathname) que lo identifica."

Esta versión de bajo nivel, si bien es completamente cierta, es demasiado simple...
Por ello definiremos varios criterios para distinguir diversas subcategorías de archivos. Estos tipos de archivo se diferenciarán desde el punto de vista de la programación: cada uno de ellos proporcionará diferentes funcionalidades (métodos) para su manipulación.
El criterio de contenido:
Sabemos que es diferente manipular números que Strings, aunque en el fondo ambos acaben siendo bits en la memoria del ordenador. Por eso, cuando manipulamos archivos, distinguiremos dos clases de archivos dependiendo del tipo de datos que contienen:
  • Los archivos de caracteres (o de texto)
  • Los archivos de bytes (o binarios)
Un fichero es aquel formado exclusivamente por caracteres y que puede crearse y visualizarse usando un editor. Las operaciones de lectura y escritura trabajarán con caracteres. Por ejemplo, los ficheros con código java son ficheros de texto. En cambio un fichero binario ya no está formado por caracteres sino que los bytes que contiene pueden representar otras cosas como números, imágenes, sonido...
El criterio del modo de acceso.
Existen dos modos básicos de acceso a la información contenida en un archivo:
  • Secuencial.
  • Acceso directo.
En el modo secuencial la información del archivo es una secuencia de bytes (o caracteres) de manera que para acceder al byte (o carácter) i-ésimo (se nombra de esa manera cuando estamos hablando de un caso general y que por lo tanto no conocemos el número exacto) se ha de haber accedido anteriormente a los i-1 anteriores.
En el modo de acceso directo nos permite acceder directamente a la información del byte i-ésimo. Un ejemplo muy conocido de acceso directo lo tenemos con los vectores (arrays).

Primero podremos observar un ejemplo de código que escribe en modo stream:


import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException;
/** * Clase que lee y escribe el fichero en modo Stream */
public class Stream {
   public static void main(String[] args) throws IOException {
        FileInputStream in = null; 
        FileOutputStream out = null;
        try{
            in = new FileInputStream("entrada.txt"); 
            out = new FileOutputStream("salida.txt"); 
            int c;
            while ((c = in.read()) != -1) {
                System.out.println(c);                 
                out.write(c);             
            }
        }finally {
            if (in != null) {
                in.close(); 
            }
            if (out != null) {
                out.close();             
            }
        }



    }
}
Descargar.

Otra opción es ir cargandolo en memoria:


import java.io.BufferedReader; 
import java.io.FileReader;
 import java.io.FileWriter; 
import java.io.PrintWriter;
 import java.io.IOException;
/** * Clase que lee y escribe el fichero en memoria */ 
public class ReaderWritter {
    public static void main(String[] args) throws IOException {
        BufferedReader inputStream = null;
        PrintWriter outputStream = null;
        try {
            inputStream = new BufferedReader(new FileReader("entrada.txt")); 
            outputStream = new PrintWriter(new FileWriter("salida.txt"));
            String l;
            while ((l = inputStream.readLine()) != null) {
                System.out.println(l); 
                outputStream.println(l); 
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
                }
            if (outputStream != null) {
                outputStream.close();
                }
        }
    }
}
Descargar.


Descarga todo.

Cap comentari :

Publica un comentari a l'entrada