替换字符串并在Scala中保存文件

时间:2015-07-31 21:24:44

标签: scala

我有以下代码,我正在读取文件并替换任何出现的" *。tar.gz"提供新文件名的文件。一切正常,我可以在控制台中看到替换的更改但是我无法编写包含所有更改的新文件。

def modifyFile(newFileName: String, filename: String) = {
    Source.fromFile(filename).getLines.foreach { line =>
      println(line.replaceAll(".+\\.tar\\.gz", newFileName.concat(".tar.gz")))
    }
  }
}

1 个答案:

答案 0 :(得分:2)

您忘了将修改过的行写入新文件:

def modifyFile(newFileName: String, sourceFilePath: String, targetFilePath:String) {
  scala.tools.nsc.io.File(targetFilePath).printlnAll(
    Source.fromFile(sourceFilePath).getLines().map { 
       _.replaceAll(".+\\.tar\\.gz", newFileName.concat(".tar.gz"))
    }.toSeq:_*)
}

请注意,这种方法在性能方面不是最有效的,因为源文件的内容被完全读取到内存,处理然后写回。更有效的方法将更加冗长,并将包括java的FileReader / FileWriter

UPD

正如在评论中正确指出的那样,您必须选择合适的方式to write result to file,具体取决于您拥有的工具和依赖项。