Lectura y escritura de ficheros largos en Java

Escrito por Ignacio López-Aylagas on . Posted in Programación-Java

Lectura y escritura de ficheros en Java

   Para poder ilustrar la lectura y escritura de ficheros en Java utilizaré un caso particular de ficheros que a la vez es un estándar, se tratan de los ficheros csv (comma-separated values) que se caracterizan por separar los distintos campos por coma, el mismo esquema de lectura y escritura puede utilizarse para leer y escribir cualquier tipo de fichero sin importar su longitud.

    Expongo primero el código de la clase LeerEscribirFicheroCsv que contiene dos funciones LeerFicheroCsv que toma como entrada la dirección del fichero que queremos leer y lo almacena en un ArrayList de vectores de Strings. La segunda función EscribirFicheroCsv recibe como entrada la dirección del fichero donde vamos a escribir y el ArrayList de vectores de String que contiene todos los datos.

 

package leerescribir;

import java.io.*;
import java.util.ArrayList;


public class LeerEscribirFicheroCsv {
    
   
public ArrayList<String[]> LeerFicheroCsv(String fichero_a_leer) 
    throws UnsupportedEncodingException, FileNotFoundException, IOException{

    ArrayList<String[]> datos=new ArrayList<String[]>();

    FileInputStream fis =new FileInputStream(fichero_a_leer);
    //para ficheros con símbolos propios del español, 
    //utilizar la codificación "ISO-8859-1"
    InputStreamReader isr = new InputStreamReader(fis, "UTF8"); 
    BufferedReader br = new BufferedReader(isr);

    String linea=br.readLine();
    while(linea!=null){
        datos.add(linea.split(","));
        linea=br.readLine();
    }

    br.close();
    isr.close();
    fis.close();

    return datos;

}

public void EscribirFicheroCsv(String fichero_a_escribir, ArrayList<String[]> d) 
    throws UnsupportedEncodingException, FileNotFoundException, IOException{

    OutputStream fout = new FileOutputStream(fichero_a_escribir);
    //para ficheros con símbolos propios del español, 
    //utilizar la codificación "ISO-8859-1"
    OutputStreamWriter out = new OutputStreamWriter(fout, "UTF8");

    for(int i=0; i<d.size(); i++){

        String[] fila=d.get(i);

        for(int j=0; j<fila.length; j++){
            out.write(fila[j]+",");
        }

        out.write("\n");
    }
    out.close();
    fout.close();
}
    
}

   Un ejemplo de utilización para la clase LeerEscribirFicheroCsv puede ser:

package leerescribir;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;


public class LeerEscribir {

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

    //construimos una instancia de la clase
    LeerEscribirFicheroCsv le=new LeerEscribirFicheroCsv(); 
    //leemos un fichero
    ArrayList<String[]>f=le.LeerFicheroCsv("C:\\Temp\\entrada.csv");
    //f contiene todo el contenido del fichero que acabamos de leer
    le.EscribirFicheroCsv("C:\\Temp\\salida.csv", f);
}
}

Cosas a tener en cuenta

·La codificación del fichero que vamos a leer tiene que ser la adecuada, consulta la codificación del fichero que vas a leer y substituye en la declaración del InputStreamReader (18 del código) la codificación adecuada.
·Codificación con la que quiero guardar el fichero, se debe poner en la linea donde se declara el OutputStreamWriter (41 del código)
·La ruta de los ficheros en Windows no es igual que en Linux, un ejemplo de ruta de fichero en Windows es "c:\\temp\\f1.csv", un ejemplo en Linux sería "/home/temp/f1.csv".
·Para saber más sobre ArrayList puedes ver el artículo:  Clase ArrayList de Java

Escribir un comentario


Código de seguridad
Refescar