首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PrintWriter行为

PrintWriter行为
EN

Stack Overflow用户
提问于 2021-05-07 00:03:25
回答 2查看 43关注 0票数 1

我想使用单件代码,如果参数不是null,则写入文件,否则使用标准输出。

我有下面的片段

代码语言:javascript
复制
  val fileName: String = null

  var writer: java.io.PrintWriter = null

  if (fileName==null)
    writer = new java.io.PrintWriter(System.out)
  else
    writer = new java.io.PrintWriter(new java.io.File(fileName))

  writer.println("111")
  writer.flush()
  //writer.close()
  System.out.println("222")

一切都如预期的那样工作,但我假设在一般情况下,需要在使用它之后关闭编写器,。如果我错了,请纠正我。

但是,如果我取消注释writer.close(),那么"222“就不是发音了,所以看起来像关闭PrintWriter会禁用标准输出。

另一个问题是如何在没有var的情况下重写代码。

更新

没有var的代码可以如下所示(我故意不使用import)

代码语言:javascript
复制
  def getWriter(filename: String): java.io.PrintWriter = {
    if (fileName==null)
      new java.io.PrintWriter(System.out)
    else
      new java.io.PrintWriter(new java.io.File(fileName))
  }

  val writer = getWriter(fileName)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-07 00:16:14

是啊。别把标准关在外面。

您可以包装System.out,使接近调用什么都不做。在java中,它看起来类似于:

代码语言:javascript
复制
PrintStream closeIgnoringOut = new PrintStream(System.out) {
    @Override public void close() {}
};
票数 2
EN

Stack Overflow用户

发布于 2021-05-07 05:01:31

即使filename是一个适当的String,它也可能不是一个可写文件。

代码语言:javascript
复制
def getWriter(filename: String): java.io.PrintWriter =
  util.Try(new java.io.PrintWriter(new java.io.File(filename)))
      .getOrElse(new java.io.PrintWriter(System.out){
        override def close() = ()
      })

如果System.out由于任何原因失败,这将默认为filename

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67427415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档