java - Scala 打开写入标准输出或文件

标签 java scala io stdout

假设我有一个函数

writeToFileOrStdout(fname: String = Nil) = { ... }

如果用户为 fname 传递一个字符串值,那么我想打开一个具有该名称的文件并写入它;否则,我想打印到标准输出。我总是可以只编写一个 if 语句来处理这个问题,但是我如何在 fname 上编写一个 case 语句并打开正确的相应输出流?

    val outStream = fname match {
      case Nil => ???
      case _   => new java.io.FileOutputStream(new java.io.File(fname))
    }
    outStream.write( ... )

谢谢!

最佳答案

为什么不将函数重写为:

def writeToFileOrStdout(fname: Option[String] = None) = {
  val outStream = fname match{
    case Some(name) => new java.io.FileOutputStream(new java.io.File(name))
    case None => System.out
  }
  ...
}

使用 Option 作为可选输入始终是一个好主意,而不是使用 null。这基本上就是它的用途。在好的 scala 代码中,您不会看到对 null 的显式引用。

事实上,你的代码甚至无法为我编译。 Nil 用于表示空列表,而不是 null 或未提供的 String

关于java - Scala 打开写入标准输出或文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576253/

相关文章:

scala - 如何在 Scala 中编写此配置逻辑?

scala - EJB 和 JPA 可以在 Lift 中使用吗? Lift 和 JSF 能否并行?

java - 从原始文本文件中获取所有 XML?

java - 使用 Spring REST 端点提供 yaml 文件

scala - !不是 String 的成员

java - 如何关闭正在进行IO操作的线程

hadoop - Hadoop YARN:如何管理I/O

java - 多个Java进程可以同时读取同一个文件吗?

java - 操纵 Android 屏幕颜色 RGB

java - Jackson XML 列表元素匹配它们的根名称