Я пытался использовать java.io.FileReader для чтения некоторых текстовых файлов и преобразования их в строку, но обнаружил, что результат неверно закодирован и вообще не читается.
Вот мое окружение:
Мои файлы имеют кодировку UTF-8 или кодировку CP1252, и некоторые из них (файлы в кодировке UTF-8) могут содержать китайские (не латинские) символы.
Я использую следующий код для своей работы:
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
Приведенный выше код не работает. Я обнаружил, что кодировка FileReader - CP1252, даже если текст в кодировке UTF-8. Но JavaDoc из java.io.FileReader говорит, что:
Конструкторы этого класса предполагают
что кодировка символов по умолчанию
и размер байтового буфера по умолчанию
необходимо.
Значит ли это, что я не обязан сам устанавливать кодировку символов, если использую FileReader? Но в настоящее время я получил неправильно закодированные данные, как правильно справиться с ситуацией? Спасибо.