我已经看过this question,但我并不完全确定我能用所提供的答案达到我想要的效果。
请注意,这只是学习Scala的经验。我将为您提供的示例可能没有意义。
我想打开我的〜/ .subversion / servers文件,如果我发现一行包含" proxy"我想要评论它(基本上我只想在角色前加上#34;#")。每隔一行必须保持原样。
所以,这个文件:
Line 1
Line 2
http-proxy-host = defaultproxy.whatever.com
Line 3
会变成:
Line 1
Line 2
# http-proxy-host = defaultproxy.whatever.com
Line 3
我能够读取文件,找到我想要更改的行并打印它们。这是我到目前为止所做的:
val fileToFilter = new File(filePath)
io.Source.fromFile(fileToFilter)
.getLines
.filter( line => !line.startsWith("#"))
.filter( line => line.toLowerCase().contains("proxy") )
.map( line => "#" + line )
.foreach( line => println( line ) )
我错过了两件事:
这可能吗?我是否遵循正确的方法来解决这个问题?
非常感谢。
答案 0 :(得分:3)
if-else
这应该有效:
import java.io.File
import java.io.PrintWriter
import scala.io.Source
val f1 = "svn.txt" // Original File
val f2 = new File("/tmp/abc.txt") // Temporary File
val w = new PrintWriter(f2)
Source.fromFile(f1).getLines
.map { x => if(x.contains("proxy")) s"# $x" else x }
.foreach(x => w.println(x))
w.close()
f2.renameTo(f1)
答案 1 :(得分:0)
库存scala库中没有“替换”文件方法:因此您将打开文件(如您所示),进行更改,然后将其保存(也以各种方式执行)到同一路径
AFA如果他们有代理,则将某些行更新为#:
.map line { case l if l.contains("proxy") => s"# $l"
case l => l
}