Недавно я начал изучать java.nio. И у меня есть пример в моем учебнике, как читать текстовый файл с SeekableByteChannel:SeekableByteChannel russian chars
int count;
Path path;
try {
path = Paths.get(System.getProperty("user.home") + "/desktop/text.txt");
} catch (InvalidPathException e) {
out.println(e.getMessage());
return;
}
try (SeekableByteChannel channel = Files.newByteChannel(path)) {
ByteBuffer buffer = ByteBuffer.allocate(128);
do {
count = channel.read(buffer);
if (count != -1) {
buffer.rewind();
for (int i = 0; i < count; i++)
out.print((char) buffer.get());
}
} while (count != -1);
} catch (IOException e) {
out.println("File not found!!!");
}
out.flush();
Так я сделал текстовый файл с английскими и русскими словами в нем, используя ANSI кодировки. И это то, что я получаю:
Метод buffer.get() возвращаетбайт значение и русские символы начинаются с где-то 1000. Так что я изменил кодировку для UTF-8 и другой способ:
for (int i = 0; i < count; i += 2)
out.print(buffer.getChar()); //reads 2 bytes and converts them to char
Но это дает мне ряд вопросительных знаков.
Так кто-нибудь знает, как правильно прочитать русский текст, используя SeekableByteChannel?
text.txt можно лучше приклеить к примеру. –