Как писать контент в определенной позиции в файле

Предположим, что у меня есть файл с именем abhishek.txt и содержит следующую строку

Я, и как тебя зовут.

Теперь я хочу написать

Абхишек

после "Я", как будто я Абхишек,.. Как напрямую писать контент в этой конкретной позиции.

Ответ 1

Вы не можете вставлять данные в файл. Вы можете переписать данные в определенном месте с помощью RandomAccessFile. Однако вставка требует изменения всех данных после нее. Для вашего случая попробуйте что-то вроде этого:

File file = new File("abhishek.txt");
Scanner scanner = new Scanner(file).useDelimiter("\n");
String line = scanner.next();
String newLine = line.substring(0, 5) + "Abhishek" + line.substring(5);
FileWriter writer = new FileWriter(file);
writer.write(newLine);
writer.close();

Ответ 2

Вы не можете вставлять данные в файл... файловые системы (в общем) просто не поддерживают такую ​​операцию. Обычно вы открываете один файл для чтения, а другой для записи, копируете первую часть файла из одного потока в другой, записываете дополнительную часть, а затем копируете вторую часть файла.

Если вы пытаетесь заменить исходный файл, вам необходимо удалить его и переместить новый файл на место.

Иногда бывает проще прочесть весь файл в памяти за один раз - это зависит от того, что вы пытаетесь сделать, и от того, насколько большой файл.

Ответ 3

В общем, вам нужно прочитать старый файл, изменить содержимое в памяти и снова записать его.

Здесь есть много вариантов, независимо от того, читаете ли вы весь файл за один раз или небольшую часть за раз, замените ли вы существующий файл и т.д., но обычно это шаблон.

Ответ 4

У вас есть три варианта:

  • Поместите исходную запись с достаточным пространством, в котором может использоваться RandomAccessFile (и вам не нужно какое-то дополнительное конечное пространство. Простая, но ограниченная утилита
  • Если вы делаете это, используйте механизм шаблонов (StringTemplate, Velocity и т.д.). Возможно, слишком много работы, если вы делаете это только один раз.
  • Напишите свой собственный простой механизм шаблонов, который читает его в памяти, заменяет регулярное выражение и записывает его обратно. Не особенно эффективно, но если у вас очень простое и ограниченное использование, возможно, лучший компромисс.

Ответ 5

Мне удалось сделать это с помощью метода RandomAccessFile:

введите описание изображения здесь

С этим вы получаете файл, содержащий именно ожидаемый контент "Я Абхишек". Это работает, даже если бы у вас был контент после первой строки, который вы хотите сохранить в файле (это была моя первоначальная проблема: у меня был большой файл, и мне пришлось вставлять некоторый контент после определенной строки), а не писать на конец файла, что проще.