scala - 更改scala中文件的内容

标签 scala

我见过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 ) )

我错过了两件事:

  1. 如何保存对文件所做的更改(我可以直接执行此操作,还是需要将更改复制到临时文件,然后用该临时文件替换“服务器”文件?)<
  2. 如何有条件地应用“ map ”(如果我发现“代理”一词,我会在前面添加“#”,否则我会按原样保留该行)。

这可能吗?我是否遵循正确的方法来解决这个问题?

非常感谢。

最佳答案

  1. 保存到其他文件并将其重命名回原始文件。
  2. 使用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/

相关文章:

scala - 如何让 Spark slave 在 Hadoop+Spark 集群中使用 HDFS 输入文件 'local'?

scala - Scala 中令人困惑的类型不匹配

scala - Spark BigQuery 连接器 : Writing ARRAY type causes exception: ""Invalid value for: ARRAY is not a valid value""

scala - 在 Scala 中,内例类如何一致地重写方法?

scala - 从 Shapeless-guide 通用派生 Typeclass

scala - 使用宏的条件编译适用于方法,但不适用于字段

scala - Scala 中 Int 和 Integer 有什么区别?

scala - 使用 Play 减小 Heroku 的 slug 大小! 2.0 & Scala

eclipse - 用于 Eclipse 的 Scala IDE : Any way to "quickfix" imports?

scala - 方法参数是否触发 Spark 中的序列化?