Следующий код преобразует файл из srcEncoding в 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--
Использование Try-с-ресурсов (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);
}
}
Non-UTF8? Хотите немного сузить это? Это легко, если вы знаете кодировку ввода и, по сути, невозможны, если вы этого не сделаете. –
некоторые соображения, файлы BIG (например, 1 ГБ), поэтому я не могу поместить их в объект String ... –
Какова кодировка вашего файла? Если вы работаете в Linux или OS X (и других Un * x), вы можете просто ввести: * файл some_file *, и он должен указать вам кодировку. Кстати, если вы используете Un * x (по крайней мере, как Linux, так и OS X), вы должны иметь командную строку * iconv *. * «man iconv» * говорит: * «Конвертировать кодированные данные из одной кодировки в другую» *, которая, возможно, будет лучше работать в 1 ГБ-файле, чем самозаписываемое Java-приложение. Обратите внимание, что кодировка UTF-8 может представлять каждый отдельный код Unicode, поэтому, говоря, что у файла * "есть некоторые символы не-utf8" * звучит сомнительно ... – NoozNooz42