我见过this question但我不完全确定我可以通过提供的答案实现我想要的目标。
注意,这只是学习Scala的一次经历。我为您提供的示例可能没有意义。
我想打开我的 ~/.subversion/servers 文件,如果我发现一行包含“proxy”一词,我想对其进行评论(基本上我只想在前面添加字符“#”)。其他所有行必须保持原样。
所以,这个文件:
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 ) )
我错过了两件事:
- 如何保存对文件所做的更改(我可以直接执行此操作,还是需要将更改复制到临时文件,然后用该临时文件替换“服务器”文件?)<
- 如何有条件地应用“ map ”(如果我发现“代理”一词,我会在前面添加“#”,否则我会按原样保留该行)。
这可能吗?我是否遵循正确的方法来解决这个问题?
非常感谢。
最佳答案
- 保存到其他文件并将其重命名回原始文件。
- 使用
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)
关于scala - 更改scala中文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847432/