【发布时间】:2012-02-29 05:26:51
【问题描述】:
有没有可能,如果有的话是怎么做的?在 Windows 或 Linux 命令行上工作的常用 > 和 >> 在这种情况下不起作用。
【问题讨论】:
标签: scala read-eval-print-loop redirectstandardoutput
有没有可能,如果有的话是怎么做的?在 Windows 或 Linux 命令行上工作的常用 > 和 >> 在这种情况下不起作用。
【问题讨论】:
标签: scala read-eval-print-loop redirectstandardoutput
您可以从控制台以编程方式执行此操作:
import java.io.FileOutputStream
import scala.Console
Console.setOut(new FileOutputStream("<output file path>"))
从现在开始,所有print 和println 都将被定向到该文件中
【讨论】:
FileOutputStream 存储在 val 中,然后在其上调用 close 以将内容刷新到文件中。
<console>:82: warning: method setOut in class DeprecatedConsole is deprecated (since 2.11.0): use withOut Console.setOut(new FileOutputStream("output.txt")) 除了它还可以工作withOut 似乎还没有工作......
从你的问题中不清楚你想如何使用这样的东西。您尝试做的事情的一个例子可能会有所帮助。
这是一个隐式函数,它将添加一个简单的运算符,将任何对象作为字符串写入文件。 (请注意,我使用 >> 表示 unix 风格的 >,因为 > 在 Scala 中已经有意义(“小于”)。如果您愿意,可以将其替换为其他运算符。)
implicit def anyToFileOutput(self: Any) = new {
import java.io._
def >>(filename: String) {
val f = new BufferedWriter(new FileWriter(filename))
try {
f.write(self.toString)
} finally {
if (f != null)
f.close()
}
}
}
你会这样使用它:
scala> List(1,2,3) >> "out.txt"
在包含List(1, 2, 3)的工作目录中生成一个文件“out.txt”
【讨论】:
calculateSomething(a,b,c),它会返回一个Ints 列表,理想情况下它会引导print 和println calculateSomething 中的语句到文件,并将返回的列表结果发送到文件。
对我来说似乎工作正常:
dcs@ayanami:~/github/scala (master)$ scala -e "println(2 * 2)" > output
dcs@ayanami:~/github/scala (master)$ cat output
4
【讨论】: