В java.io.RandomAccessFile, когда метод writeChar() используется для записи массива символов в цикле в текстовый файл как
RandomAccessFile txtfile = new RandomAccessFile("Hello.txt","rw");
char c[] = {'S','i','g','n','e','d'};
for(char k:c) txtfile.writeChar(k);
Выдает результат в Hello.txt, как при открытии в обычном блокноте
S i g n e d
Но при открытии в текстовом редакторе NotePad++ файл Hello.txt отображается как
[NUL]S[NUL]i[NUL]g[NUL]n[NUL]e[NUL]d
И когда я использовал метод writeUTF() для записи строки в Hello.txt как
txtfile.writeUTF("hello");
Он дал результат в виде пустого места впереди, а при открытии в NotePad ++ он отображается как
[ENQ]hello
Как я могу написать или добавить обычную строку в файл без пробелов (например, [NUL] или [ENQ]), как в этом случае?
Пожалуйста, напишите ответ, как записать любую строку в файл в RandomAccessFile на Java!
Заранее спасибо !
Да, я понял, я пытался записать байт UTF-8 в формате UTF-16! поэтому перед каждым написанным символом ставится NUL!
Значение char в Java составляет два байта. RandomAccessFile предназначен для чтения и записи двоичных данных. Он не выполняет никаких преобразований текста. При запросе на запись символа он просто записывает представление этого символа в памяти на диск.
Посмотрите документацию для класса RandomAccessFile:
writeChar(целое v) Записывает char в файл как двухбайтовое значение, старшим байтом вперед.
запись байта (целое v) Записывает байт в файл как однобайтовое значение.
writeBytes (строка с) Записывает строку в файл в виде последовательности байтов.
Поэтому используйте writeByte вместо writeChar, чтобы записать символ в файл в виде одного байта ASCII, с которым все редакторы должны работать одинаково. Чтобы записать строку в файл в виде однобайтовых символов за один вызов, используйте метод writeBytes, который принимает строку и записывает ее в файл в виде однобайтовых символов.
Если вы хотите только записать текст в файл, лучше использовать для этого класс FileWriter или OutputStreamWriter. Эти классы пишут текст с учетом кодировки символов. Первый предполагает кодировку символов по умолчанию. Последний позволяет указать кодировку символов, которую вы хотите использовать для преобразования текста в байты перед записью в файл.
Какую кодировку файлов вы хотите использовать? То, что вы описываете, является желаемым поведением, если UTF-16 используется в качестве кодировки файла.