Как я могу заменить первую строку большого файла на 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 байт.