Il codice seguente converte un file da 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--
Utilizzando (Java 7) risorse Try-con-:
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);
}
}
fonte
2010-06-10 21:48:32
non-UTF8? Vuoi restringere un po 'questo? È facile una volta che conosci la codifica di input, ed essenzialmente impossibile se non lo fai. –
alcune considerazioni, i file sono BIG (come 1GB) quindi non posso metterli in un oggetto String ... –
qual è la codifica del tuo file? Se sei su Linux o OS X (e altri Un * x) puoi semplicemente digitare: * file some_file * e ti dirà la codifica. A proposito, se stai su Un * x (almeno su Linux e OS X), dovresti avere la riga di comando * iconv *. * "man iconv" * dice: * "Converti la codifica dei file dati da una codifica a un'altra" *, che probabilmente farà un lavoro migliore su un file da 1 GB rispetto a un programma Java auto-scritto. Notare che la codifica UTF-8 può rappresentare ogni singolo punto di codice Unicode, quindi dire che il file * "ha alcuni caratteri non-utf8" * sembra dubbio ... – NoozNooz42