как записать содержимое в определенную позицию в файле

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

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

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

Абхишек

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

5 ответов


вы не можете вставить данные в файл. Вы можете перезаписать данные в определенном месте с 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();

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

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

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


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

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


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

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

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

enter image description here

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