Я бы не предложил решение, которое записывает данные в файл, который обрабатывается одновременно.Вместо этого вы можете применить очень простой и понятный подход - записать ожидаемое содержимое во временный файл и, если вам нужно переопределить входной файл, переместите новый временный файл на старый.
Рассмотрите следующий пример:
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