是否有可能在这种情况下使用常规的Windows或Linux命令行中有效的>
和 >>
符号,如果可以,该如何实现?
是否有可能在这种情况下使用常规的Windows或Linux命令行中有效的>
和 >>
符号,如果可以,该如何实现?
您可以通过控制台编程来实现:
import java.io.FileOutputStream
import scala.Console
Console.setOut(new FileOutputStream("<output file path>"))
从现在开始,所有的print
和println
输出都会被重定向到这个文件中。
从您的问题中不清楚您想如何使用这样的东西,提供一个示例可能有所帮助。
这里有一个隐式函数,它将添加一个简单的运算符,将任何对象写为字符串到文件中。 (请注意,我使用>>
表示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"
这会在当前工作目录下生成一个名为 "out.txt" 的文件,其中包含 List(1, 2, 3)
。
calculateSomething(a,b,c)
函数,理想情况下它会将calculateSomething
函数内的print
和println
语句输出到文件,并将返回的列表结果发送到文件中。 - Gigatron在我看来,它似乎工作正常:
dcs@ayanami:~/github/scala (master)$ scala -e "println(2 * 2)" > output
dcs@ayanami:~/github/scala (master)$ cat output
4
setOut
在2.9 REPL中无法正常工作。请参见我的回答。 - 4e6FileOutputStream
存储在一个val
中,并调用close
将内容刷新到文件中。 - Gigatron<console>:82: 警告: DeprecatedConsole类中的setOut方法已弃用(自2.11.0以来):请使用withOut Console.setOut(new FileOutputStream("output.txt"))
除了它还可以工作外,withOut
似乎还没有起作用... - Techmag