2012-02-29 14 views

回答

11

你可以做到這一點programmaticaly從控制檯:

import java.io.FileOutputStream 
import scala.Console 

Console.setOut(new FileOutputStream("<output file path>")) 

從現在開始,所有printprintln將被定向到該文件

+0

由於[SI-4793](https://issues.scala-lang.org/browse/SI-4793),'setOut'在2.9 REPL中不起作用。看到[我的答案](http://stackoverflow.com/questions/7219316/println-vs-system-out-println-in-scala/7219519#7219519) – 4e6 2012-02-29 06:24:25

+1

雖然不完美,我接受這是最有用的答案。我注意到有時文件中沒有任何內容,直到我退出REPL。爲了解決這個問題,需要將'FileOutputStream'存儲到'val'中,然後調用'close'來將內容刷新到文件中。 – Gigatron 2012-03-05 01:43:45

4

這是從你的問題不清楚你到底如何想使用這樣的事情。你想要做的一個例子可能會有所幫助。

這是一個隱式函數,它將添加一個簡單的運算符,將任何對象作爲字符串寫入文件。 (請注意,我用>>意味着UNIX風格>因爲>已經在斯卡拉(「小於」)的意思是,你可以,如果你喜歡與其他一些運營商替換此。)

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)

+0

這就是我想要做的 - 例如,如果我調用'calculateSomething(a,b,c)'返回'Int'列表,理想情況下它會指示'print'和'println' 'calculateSomething'內的語句寫入文件,並將返回的列表結果發送到文件。 – Gigatron 2012-02-29 18:05:43

0

看起來是工作的罰款,以我的工作目錄生成一個文件,「out.txt」:

[email protected]:~/github/scala (master)$ scala -e "println(2 * 2)" > output 
[email protected]:~/github/scala (master)$ cat output 
4 
+1

謝謝,但這是在操作系統的命令行,不在正在運行的REPL會話。 – Gigatron 2012-02-29 18:00:06

+1

@Gigatron只需生成字符串而不是打印,然後很容易發送到文件。然後,如果你展示了你打算完成的任務,而不是詢問如何實現所需的解決方案,那麼我們都可以提供更多幫助。 – 2012-02-29 18:05:00

相關問題