El siguiente código convierte un archivo de srcEncoding a tgtEncoding:
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
BufferedReader br = null;
BufferedWriter bw = null;
try{
br = new BufferedReader(new InputStreamReader(new FileInputStream(source),srcEncoding));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
} finally {
try {
if (br != null)
br.close();
} finally {
if (bw != null)
bw.close();
}
}
}
--EDIT--
Usando Try-con-recursos (Java 7):
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
try (
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(source), srcEncoding));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));) {
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
}
}
No UTF8? ¿Quieres reducir eso un poco? Es fácil una vez que conoces la codificación de entrada, y esencialmente imposible si no lo haces. –
algunas consideraciones, los archivos son GRANDES (como 1GB) así que no puedo ponerlos en un objeto String ... –
¿cuál es la codificación de su archivo? Si está en Linux o OS X (y otro Un * x) puede simplemente escribir: * file some_file * y le dirá la codificación. Por cierto, si tienes Un * x (al menos tanto Linux y OS X), deberías tener la línea de comando * iconv *. * "man iconv" * dice: * "Convertir la codificación de archivos dados de una codificación a otra" *, lo que posiblemente hará un mejor trabajo en un archivo de 1GB que una herramienta Java auto escrita. Tenga en cuenta que la codificación UTF-8 puede representar todos los puntos de código Unicode, por lo que dice que el archivo * "tiene algunos caracteres que no son utf8" * suena dudoso ... – NoozNooz42