Preciso fazer a seguinte manipulação de arquivo:
[list]recuperar um arquivo com codificação UTF-8 gerado por outro programa (cujo endereço será passado ao meu programa como parâmetro);[/list][list]retirar os 3 primeiros bytes desse arquivo (que corresponde ao Byte Order Marker);[/list][list]salvar o resultado em um novo arquivo UTF-8.[/list]
O problema é que quando realizo a manipulação, o arquivo é automaticamente convertido para ANSI (não importa todas as medidas que eu faça). E o que eu quero é que o arquivo permaneça como UTF-8, mas sem o Byte Order Marker (conhecido também como BOM) :
public static void tratarArquivoLog() {
java.io.File arquivoEntrada = new java.io.File("C:\\log_25042011.txt");
java.io.File arquivoSaida = new java.io.File("C:\\log_25042011_final.txt");
FileInputStream f = null;
FileChannel ch = null;
BufferedWriter out = null;
try {
f = new FileInputStream(arquivoEntrada);
ch = f.getChannel();
MappedByteBuffer mb = ch.map(MapMode.READ_ONLY, 0L, ch.size());
out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(arquivoSaida), Charset.forName("UTF-8"))
);
int contBytes = 0;
while (mb.hasRemaining()) {
//Se o contador de bytes for menor que 3, não grava o byte e parte para o byte subseqüente.
if (contBytes < 3) {
contBytes++;
mb.get();
} else {
out.write(mb.get());
}
}
} finally {
if (out != null) {
out.flush();
out.close();
}
if (ch != null) {
ch.close();
}
if (f != null) {
f.close();
}
}
}
Os 3 bytes eu até consegui retirar… mas o arquivo muda a codificação. Alguém pode ajudar?