Многие ответы, которые получают это почти, но не совсем, правильно.
- Если вы используете BufferedInputStream и читаете строки, в результате пропускаются разрывы строк
- Если вы используете BufferedReader или Сканер и читаете строки, в результате отсутствуют исходные разрывы строк и может быть неправильная кодировка.
- Если вы используете Writer в Result, кодировка может не соответствовать источнику
Если вы точно знаете кодировку источника, вы можете сделать это:
String file2string(File f, Charset cs) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream(10000);
InputStream in = new BufferedInputStream(new FileInputStream(f));
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
return out.toString(cs.name());
}
Если вы не знаете исходную кодировку, положитесь на анализатор XML, чтобы обнаружить его и управлять выводом:
String transform2String(File f, Charset cs) throws IOException,
TransformerFactoryConfigurationError, TransformerException {
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, cs.name());
ByteArrayOutputStream out = new ByteArrayOutputStream(10000);
t.transform(new StreamSource(new BufferedInputStream(
new FileInputStream(f))), new StreamResult(out));
return out.toString(cs.name());
}