Запись в файл с определенной кодировкой в Java
Это может быть связано с моим предыдущим вопросом (о том, как конвертировать "för" в "för")
Итак, у меня есть файл, который я создаю в своем коде. Прямо сейчас я создаю это следующим кодом:
FileWriter fwOne = new FileWriter(wordIndexPath);
BufferedWriter wordIndex = new BufferedWriter(fwOne);
затем несколько
wordIndex.write(wordBuilder.toString()); //that's a StringBuilder
окончание (после цикла while)
wordIndex.close();
Теперь проблема в том, что этот файл огромен, и я хочу (нужно) прыгнуть в него, не просматривая весь файл. seek(long pos)
метод RandomAccessFile
Позвольте мне сделать это.
Вот моя проблема: кажется, что символы в файле, который я создал, кодируются с помощью UTF-8, и единственная информация, которую я получаю, когда ищу, - это позиция символа, к которой я хочу перейти. seek(long pos)
с другой стороны, скачки в байтах, так что я не попал в нужное место, так как символ UTF-8 может быть больше одного байта.
Вот мой вопрос: могу ли я, когда я пишу файл, записать его вместо ISO-8859-15 (где символ является байтом)? Таким образом, seek(long pos)
поставит меня в нужное положение. Или я должен вместо этого попытаться использовать альтернативу RandomAccessFile
(есть ли альтернатива, где вы можете перейти к позиции персонажа?)
1 ответ
Теперь сначала беспокойство. FileWriter и FileReader - это старые служебные классы, которые используют настройки платформы по умолчанию на этом компьютере. Запустите в другом месте этот код даст другой файл, не сможет прочитать файл из другого места.
ISO-8859-15 является однобайтовой кодировкой. Но java содержит текст в Unicode, поэтому он может комбинировать все сценарии. А также char
это UTF-16. Как правило, индекс char не будет байтовым индексом, но в вашем случае он, вероятно, работает. Но разрыв строки может быть одним \n
или два \r\n
chars/bytes - зависит от платформы.
ре
Лично я думаю, что UTF-8 хорошо зарекомендовал себя, и его проще использовать:
byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
string = new String(bytes, StandardCharsets.UTF_8);
Таким образом, все специальные предложения, евро и т. Д. Всегда будут доступны.
Как минимум укажите кодировку:
Files.newBufferedWriter(file.toPath(), "ISO-8859-15");