Как заменить строку/слово в текстовом файле в groovy
Здравствуйте, я использую groovy 2.1.5, и мне нужно написать код, который показывает contens/файлы каталога с заданным путем, затем создает резервную копию файла и заменяет слово/строку из файла,
вот код, который я использовал, чтобы попытаться заменить слово в выбранном файле
String contents = new File( '/geretd/resume.txt' ).getText( 'UTF-8' )
contents = contents.replaceAll( 'visa', 'viva' )
также вот мой полный код, если кто-то хочет изменить его более эффективным способом, я буду признателен, потому что я учусь.
def dir = new File('/geretd')
dir.eachFile {
if (it.isFile()) {
println it.canonicalPath
}
}
copy = { File src,File dest->
def input = src.newDataInputStream()
def output = dest.newDataOutputStream()
output << input
input.close()
output.close()
}
//File srcFile = new File(args[0])
//File destFile = new File(args[1])
File srcFile = new File('/geretd/resume.txt')
File destFile = new File('/geretd/resumebak.txt')
copy(srcFile,destFile)
x = " "
println x
def dire = new File('/geretd')
dir.eachFile {
if (it.isFile()) {
println it.canonicalPath
}
}
String contents = new File( '/geretd/resume.txt' ).getText( 'UTF-8' )
contents = contents.replaceAll( 'visa', 'viva' )
Ответы
Ответ 1
В качестве альтернативы загрузке всего файла в память вы можете сделать каждую строку поочередно
new File( 'destination.txt' ).withWriter { w ->
new File( 'source.txt' ).eachLine { line ->
w << line.replaceAll( 'World', 'World!!!' ) + System.getProperty("line.separator")
}
}
Конечно, это (и ответ dmahapatro) полагаются на слова, которые вы заменяете не на несколько строк
Ответ 2
Как и почти все Groovy, AntBuilder - самый простой маршрут:
ant.replace(file: "myFile", token: "NEEDLE", value: "replacement")
Ответ 3
Обратитесь к этому ответу, где шаблоны заменяются. Этот же принцип можно использовать для замены строк.
Пример
def copyAndReplaceText(source, dest, Closure replaceText){
dest.write(replaceText(source.text))
}
def source = new File('source.txt') //Hello World
def dest = new File('dest.txt') //blank
copyAndReplaceText(source, dest) {
it.replaceAll('World', 'World!!!!!')
}
assert 'Hello World' == source.text
assert 'Hello World!!!!!' == dest.text
Ответ 4
Я использую этот код для замены порта 8080 на ${port.http} непосредственно в определенном файле:
def file = new File('deploy/tomcat/conf/server.xml')
def newConfig = file.text.replace('8080', '${port.http}')
file.text = newConfig
Первая строка считывает строку файла в переменную. Вторая строка выполняет замену. Третья строка записывает переменную в файл.
Ответ 5
другое простое решение будет следовать за закрытием:
def replace = { File source, String toSearch, String replacement ->
source.write(source.text.replaceAll(toSearch, replacement))
}