Подтвердить что ты не робот

Как заменить строку/слово в текстовом файле в 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' )
4b9b3361

Ответ 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))
    }