Как я могу заменить первую строку большого файла на Java?
Я хотел бы очистить первую строку текстового файла на Java. Этот файл занимает несколько гигабайт и я не хочу делать копию. Используя предложение от этот пост, Я пытаюсь сделать это с помощью RandomAccessFile, однако он пишет слишком много.
вот мой код:
RandomAccessFile raInputFile = new RandomAccessFile(inputFile, "rw");
origHeaderRow = raInputFile.readLine();
raInputFile.seek(0);
raInputFile.writeChars(Strings.repeat(" ",origHeaderRow.length()));
raInputFile.close();
и если вы хотите некоторый образец ввода и вывода, вот что происходит:
перед:
first_name,last_name,age
Doug,Funny,10
Skeeter,Valentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10
после:
alentine,9
Patti,Mayonnaise,11
Doug,AlsoFunny,10
В этом например, в большинстве редакторов файл правильно начинается с 24 пробелов, но 48 символов (включая новые строки) были заменены. После вставки сюда я вижу странные вещи вопросительного знака. Замена двойного размера делает меня чем-то, что связано с кодированием, запутывается, но я попытался writeUTF с теми же результатами.
2 ответов
char
в Java - 2 байта.
использовать writeBytes
вместо.
raInputFile.writeBytes(Strings.repeat(" ",origHeaderRow.length()));
С JavaDoc выглядит именно то, что вы ищете.
когда вы пишете символы (которые в Java являются 16-битными), каждый символ использует два байта.
Я предлагаю вам попробовать написать количество байтов, которое вы хотите, иначе ваши пробелы превратятся в nul
и space
байт.