Запись в начале текстового файла Java

Мне нужно что-то написать в начале текстового файла. У меня есть текстовый файл с контентом, и я хочу написать что-то перед этим контентом. Скажи, что у меня есть;

Добрый день, сэр, как ты сегодня?
Я в порядке, как ты?
Спасибо, что спросили, я отличный

После изменения я хочу, чтобы это было так:

Страница 1-Сцена 59
25.05.2011

Добрый день, сэр, как ты сегодня?
Я в порядке, как ты?
Спасибо, что спросили, я отличный

Только что составил контент 🙂 Как я могу изменить текстовый файл таким образом?

Вы не можете изменить его таким образом – файловые системы обычно не позволяют вставлять данные в произвольные местоположения, но вы можете:

  • Создать новый файл
  • Напишите префикс к нему
  • Скопируйте данные из старого файла в новый файл
  • Перенесите старый файл в резервную папку
  • Перенесите новый файл в папку старого файла
  • Необязательно удалить старый файл резервной копии

На всякий случай это будет полезно для кого-то, вот полный исходный код метода для добавления строк в файл с использованием библиотеки Apache Commons IO . Код не считывает весь файл в память, поэтому он будет работать с файлами любого размера.

public static void prependPrefix(File input, String prefix) throws IOException { LineIterator li = FileUtils.lineIterator(input); File tempFile = File.createTempFile("prependPrefix", ".tmp"); BufferedWriter w = new BufferedWriter(new FileWriter(tempFile)); try { w.write(prefix); while (li.hasNext()) { w.write(li.next()); w.write("\n"); } } finally { IOUtils.closeQuietly(w); LineIterator.closeQuietly(li); } FileUtils.deleteQuietly(input); FileUtils.moveFile(tempFile, input); } 

Я думаю, что вам нужен случайный доступ. Ознакомьтесь с соответствующим учебным курсом java . Однако я не верю, что вы можете просто вставлять данные в произвольную точку в файле; Если я правильно помню, вы только перезаписали данные. Если вы хотите вставить, вам придется иметь свой код

  1. скопируйте блок,
  2. перезаписывать ваши новые вещи,
  3. скопируйте следующий блок,
  4. перезаписать ранее скопированный блок,
  5. вернитесь к 3, пока не будет больше блоков

Как предположил @atk, java.nio.channels.SeekableByteChannel – хороший интерфейс. Но он доступен только от 1.7.

Обновление: если у вас нет проблемы с использованием FileUtils, используйте

 String fileString = FileUtils.readFileToString(file); 

Это не прямой ответ на вопрос, но часто файлы доступны через InputStreams. Если это ваш прецедент, вы можете связать входные streamи через SequenceInputStream для достижения того же результата. Например

 InputStream inputStream = new SequenceInputStream(new ByteArrayInputStream("my line\n".getBytes()), new FileInputStream(new File("myfile.txt"))); 
  • Запись / чтение файлов в / из внутренней памяти телефона Android
  • Как искать и заменять текст в файле с помощью Python?
  • Чтение Eclipse stdin (System.in) из файла
  • Как создать zip-архив с помощью PowerShell?
  • Лучший способ писать байты в середине файла в Java
  • Открытый файл PDF для Android
  • читать файл назад (последняя строка первая)
  • ОС обнаружение makefile
  • Переименуйте файл с помощью Java
  • C # - Получить список файлов, за исключением скрытых
  • Скачать файл с помощью libcurl в C / C ++
  • Давайте будем гением компьютера.