Busca en simplementeJava

sábado, 5 de febrero de 2011

Pequeña clase para traducir ficheros

Como sabéis me llevo unos días peleando con las codificaciones de caracteres de los ficheros. Para mis pruebas he montado una pequeña clase que convierte un fichero en un encoding en otro con el mismo contenido pero con encoding diferente. Os aseguro que ha sido muy útil para mis pruebas.

El único detalle a tener en cuenta es que los nombres de los encodings que pasamos por parámetro tienen que coincidir con los que nos indican en esta tabla.

Os dejo el código básico comentado para vuestro uso y disfrute. Espero que os sirva tanto como a mí.


package org.sj.encodings;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class Translator {

/** Salto de línea. */
private static final String SALTO_DE_LINEA = "\n";

/**
* Traduce el fichero de entrada al fichero de salida con los encodings
* indicados.
* @param inFile fichero de entrada
* @param inputEncoding codificación de caracteres del fichero de entrada
* @param outputFile fichero de salida
* @param outputEncoding codificación de caracteres del fichero de salida
*/
public void translator(File inFile, String inputEncoding, File outputFile,
String outputEncoding)
throws UnsupportedEncodingException, FileNotFoundException,
IOException {
// abrimos un stream sobre el fichero de entrada
FileInputStream fis = new FileInputStream(inFile);
// indicamos el encoding con el que leeremos
InputStreamReader in = new InputStreamReader(fis, inputEncoding);
// incluímos un buffer para mejorar la lectura
BufferedReader br = new BufferedReader(in);

// abrimos un stream sobre el fichero de salida
FileOutputStream fos = new FileOutputStream(outputFile);
// indicamos el encoding con el que escribiremos
OutputStreamWriter out = new OutputStreamWriter(fos, outputEncoding);
// incluímos un buffer para mejorar la escritura
BufferedWriter bw = new BufferedWriter(out);

// línea actual
StringBuffer line;
// leemos el fichero de entrada y lo escribimos en la salida.
while (br.ready()) {
line = new StringBuffer();
line.append(br.readLine());
line.append(SALTO_DE_LINEA);
bw.write(line.toString());
}
}
}

No hay comentarios:

Publicar un comentario