Самый простой способ - прочитать весь файл в памяти, затем записать первую часть обратно в файл, записать вставленную строку в файл и записать оставшуюся часть обратно в файл. Это должно быть относительно просто, когда вы читаете файл как массив строк, но вы можете столкнуться с проблемами, если ваш файл очень большой, так как при таком подходе вы должны прочитать весь файл в память.
В качестве альтернативы вы можете найти место, в которое вы хотите вставить строку, прочитать строки после этой точки в памяти, вернуться к этой точке в файле, записать новую строку в файл и, наконец, записать оставшиеся строки в файл. Опять вы столкнетесь с проблемами, если остальная часть файла будет очень большой, поскольку вам придется читать все это в память.
Третий подход - записать первую часть в новый файл, записать вставленную строку в новый файл, записать оставшуюся часть исходного файла в новый файл и, наконец, заменить старый файл новым файлом на файловая система. Этот подход позволяет работать с одной строкой за раз, поэтому вы можете обрабатывать файлы, которые не помещаются в память.
Причина, по которой запись файла работает таким образом, заключается в том, что файл похож на массив байтов фиксированного размера: когда вы записываете байт в файл, вы перезаписываете существующий байт (я игнорирую случай, когда вы добавляете файл здесь). Таким образом, единственный способ вставить что-либо в файл - это сначала переместить старый контент в новое место, прочитав его из старого места и записав его в новое место. После этого вы можете «вставить» данные в свободную область.