2010-09-15 48 views
7

Tôi đã tự hỏi liệu có cách nào gọn gàng để viết dòng mới vào tệp từ Groovy không. Tôi có kịch bản sau đây:Làm cách nào để in gọn dòng mới trong Groovy?

new File("out.txt").withWriter{ writer -> 
    for(line in 0..100) { 
      writer << "$line" 
    } 
} 

tôi có thể sử dụng writer << "$line\n" hoặc writer.println("$line"), nhưng tôi đã wondring nếu có cách nào để sử dụng << điều hành để nối thêm các dòng sản phẩm mới đối với tôi.

Trả lời

5

Bạn có thể sử dụng chương trình meta để tạo chức năng đó. Một giải pháp dễ dàng để thay đổi hành vi của nhà điều hành < < sẽ là sử dụng danh mục tùy chỉnh.

Ví dụ:

class LeftShiftNewlineCategory { 
    static Writer leftShift(Writer self, Object value) { 
     self.append value + "\n" 
    } 
} 
use(LeftShiftNewlineCategory) { 
    new File('test.txt').withWriter { out -> 
     out << "test" 
     out << "test2"  
    } 
} 

Thông tin thêm về loại ở đây: http://docs.codehaus.org/display/GROOVY/Groovy+Categories

+0

Đây là nội dung hay. Tôi mới bắt đầu với Groovy vài ngày trước và không biết về tính năng đó. Tôi phải kiểm tra nó ra! Cảm ơn xlson. –

+0

Bạn được chào đón! :) Có nhiều cách khác nhau để sử dụng lập trình meta trong Groovy để tăng cường các API hiện có. Điều tốt với các loại (imho) là chúng được sắp xếp để bạn không thay đổi hành vi trong tất cả các chương trình của bạn. Xem phần giới thiệu này về lập trình meta Groovy nếu bạn muốn tìm hiểu thêm về nó: http://www.ibm.com/developerworks/java/library/j-pg06239.html – xlson

0

Các bạn đã thử

writer << "$line" << "\n" 

Đó là viết tắt cho

writer << "$line" 
writer << "\n" 
5

Đó là một ý tưởng tốt đẹp để hỏi hệ thống cho các dòng tách đúng vì chúng có thể thay đổi giữa các hệ điều hành.

writer << "Line 1" + System.getProperty("line.separator") + "Line 2" 
+0

Một số hệ thống yêu cầu \ n và các hệ thống khác yêu cầu \ r \ n. Thật khó để nói, vì vậy hãy để hệ thống tính toán nó theo ví dụ này. – Spider

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