Как вставить строку в файл перед совпадением строк в Groovy - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь прочитать текстовый файл, найти определенный текст в строке и, если совпадает, добавить новую строку перед найденной строкой

Так что, если у меня есть текстовый файл с

Это тестовая строка для выпуска @ 12345

Затем я могу выполнить поиск @ 12345 и добавить что-то, например,

@ review

Этотестовая строка для выпуска @ 12345

Я пытаюсь использовать этот пример, но могу добавить строки только после совпадения

def file = new File('test.txt')
def raf = new RandomAccessFile(file, 'rw')

def line = raf.readLine()
while (!line.contains("@12345")) {
  line = raf.readLine()
}

raf.writeBytes('@Review')
raf.close()

1 Ответ

0 голосов
/ 01 декабря 2018

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

Рассмотрите следующий пример:

import com.google.common.io.Files

def oldFile = new File('test.txt')
def newFile = File.createTempFile("test", UUID.randomUUID().toString())

newFile.withWriter { output ->
  oldFile.eachLine { line ->
    if (line.contains("@12345")) {
      output.write("@Review\n")
    }
    output.write(line)
    output.write("\n")
  }
}

Files.move(newFile, oldFile)

Здесь мы создаем новый временный файл, читаем из входного файла и помещаем содержимое в новый файл.Когда мы определяем @12345, мы добавляем строку с новой строкой, содержащей @Review.В конце мы вызываем Files.move(newFile, oldFile), и этот метод обрабатывает перемещение содержимого из одного файла в другой и удаляет временный файл, который мы использовали в этом подходе.

Запуск этого примера с файлом test.txt, подобным этому:

lorem ipsum
dolor sit amet
This is a test string for issue @12345
something else

создает следующий обновленный test.txt файл:

lorem ipsum
dolor sit amet
@Review
This is a test string for issue @12345
something else
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...