Я пытаюсь отобразить содержимое файла txt или docx в JTextArea, но текстовая область не отображает текст на армянском или русском языке. Включение UTF-8 в InputStreamReader не помогает:
public class TextReader {
public static String getText(File textFile) throws IOException {
FileInputStream fis = new FileInputStream(textFile);
InputStreamReader isr = new InputStreamReader(fis, "UTF8");
BufferedReader br = new BufferedReader(isr);
StringBuilder text = new StringBuilder();
String c;
while ((c = br.readLine()) != null)
text.append(c + "\n");
fis.close();
isr.close();
br.close();
return String.valueOf(text);
}
}
Я использую этот статический метод в другом классе JTextArea:
String text = TextReader.getText(currentFile);
textArea.setText(text);
После запуска и выбора файла я получил случайные символы. Что могло бы быть решением в этом случае?
Кроме того, действительно ли исходный файл закодирован в utf-8?
Я добавил universalchardet в класс TextReader для определения кодировки atuo, и это помогло. Кроме того, я добавил метод setFont для textArea, чтобы он получал правильную кодировку из класса TextReader и использовал ее.
Кстати, какую версию Java вы используете? В Java 8 вы можете просто использовать return Files.lines(textFile.toPath()).collect(Collectors.joining("\n"));. В Java 11 вы можете использовать return Files.readString(textFile.toPath()); для чтения всего файла за один раз.




Кажется, ваш код в порядке. Я предполагаю, что вы пытаетесь прочитать файл docx.
Таким образом вы не можете напрямую читать файлы docx. Используйте какую-нибудь библиотеку, например POI Apache.
Если вы действительно используете текстовый файл, возможно, приложение, которое вы используете для сохранения файла, использует неправильную кодировку. Вы можете попробовать сохранить некоторый (жестко закодированный) образец русского текста с использованием самой Java в текстовый файл и снова прочитать его на своем JTextArea.
Да, файл действительно был неправильно закодирован. Поэтому я добавил в класс функции universalchardet, чтобы не зависеть от кодировки файла. Для файлов Word я буду использовать Apache POI, спасибо!
Используйте отладку, чтобы убедиться, что текст не поврежден Читателем. Проверьте шрифт, используемый JTextArea. Возможно, шрифт не поддерживает эти символы.