2012-02-29 30 views

Trả lời

11

Bạn có thể làm điều đó programmaticaly từ giao diện điều khiển:

import java.io.FileOutputStream 
import scala.Console 

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

từ giờ trở đi tất cả printprintln sẽ được đưa trực tiếp vào tập tin này

+0

'setOut' không hoạt động trong 2.9 REPL do [SI-4793] (https://issues.scala-lang.org/browse/SI-4793). Xem [câu trả lời của tôi] (http://stackoverflow.com/questions/7219316/println-vs-system-out-println-in-scala/7219519#7219519) – 4e6

+1

Mặc dù không hoàn hảo, tôi chấp nhận điều này là nhất câu trả lời hữu ích. Tôi nhận thấy đôi khi không có gì trong tệp cho đến khi tôi thoát khỏi REPL. Để giải quyết vấn đề liên quan đến việc lưu trữ 'FileOutputStream' trong' val' và sau đó gọi 'close' trên nó để xóa nội dung vào tệp. – Gigatron

4

Đó là chưa rõ ràng từ câu hỏi của bạn chính xác như bạn muốn sử dụng một điều như vậy . Một ví dụ về những gì bạn đang cố gắng làm có thể hữu ích.

Đây là hàm ẩn sẽ thêm một toán tử đơn giản viết đối tượng bất kỳ dưới dạng Chuỗi vào tệp. (Lưu ý rằng tôi đang sử dụng >> nghĩa unix-style > từ > đã có ý nghĩa trong Scala ("ít hơn"). Bạn có thể thay thế này với một số nhà khai thác khác nếu bạn muốn.)

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() 
    } 
    } 
} 

Bạn sẽ sử dụng nó như thế này:

scala> List(1,2,3) >> "out.txt" 

nào tạo ra một tập tin, "out.txt" trong thư mục làm việc chứa List(1, 2, 3)

+0

Đây là những gì tôi đang cố gắng làm - ví dụ, nếu tôi gọi 'calculateSomething (a, b, c)' trả về một danh sách 'Int', lý tưởng nó sẽ hướng 'print' và' println' các câu lệnh trong 'calculateSomething' vào một tệp, và cũng gửi kết quả danh sách trả về tới một tệp. – Gigatron

0

Trông có tác dụng tốt với tôi:

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

Cảm ơn, nhưng đó là dòng lệnh OS, không phải trong phiên REPL đang chạy. – Gigatron

+1

@Gigatron Chỉ tạo chuỗi thay vì in và sau đó dễ dàng gửi đến tệp. Sau đó, một lần nữa, nếu bạn cho thấy những gì bạn dự định thực hiện thay vì hỏi làm thế nào để thực hiện các giải pháp mong muốn của bạn, tất cả chúng ta có thể hữu ích hơn nhiều. –

Các vấn đề liên quan