Как я могу заменить первую строку большого файла в Java? - PullRequest
9 голосов
/ 20 августа 2011

Я хотел бы очистить первую строку текстового файла в 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 ]

8 голосов
/ 20 августа 2011

char в Java составляет 2 байта.

используйте writeBytes вместо.

raInputFile.writeBytes(Strings.repeat(" ",origHeaderRow.length()));

С JavaDoc выглядит именно то, что вы ищете.

5 голосов
/ 20 августа 2011

Когда вы пишете символы (которые в Java являются 16-разрядными), каждый символ использует два байта. Я предлагаю вам попробовать написать желаемое количество байтов, иначе ваши пробелы превратятся в nul и space байтов.

...