Как писать контент в определенной позиции в файле
Предположим, что у меня есть файл с именем 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:
![введите описание изображения здесь]()
С этим вы получаете файл, содержащий именно ожидаемый контент "Я Абхишек".
Это работает, даже если бы у вас был контент после первой строки, который вы хотите сохранить в файле (это была моя первоначальная проблема: у меня был большой файл, и мне пришлось вставлять некоторый контент после определенной строки), а не писать на конец файла, что проще.