2012-08-09 40 views
8

Tôi có biến StringWriter, sw, được điền bởi mẫu FreeMarker. Khi tôi đã điền số sw, làm cách nào tôi có thể in nó vào một tệp văn bản?Ghi vào tệp txt từ StringWriter

Tôi có một vòng lặp for như sau:

for(2 times) 
{ 
    template.process(data, sw); 
    out.println(sw.toString()); 
} 

Ngay bây giờ, tôi chỉ xuất ra để chỉ màn hình. Làm thế nào để làm điều này cho một tập tin? Tôi tưởng tượng rằng với mỗi vòng lặp, sw của tôi sẽ bị thay đổi, nhưng tôi muốn dữ liệu từ mỗi vòng lặp nối với nhau trong tệp.

Chỉnh sửa: Tôi đã thử mã bên dưới. Khi nó chạy, nó cho thấy rằng file.txt đã được thay đổi, nhưng khi nó tải lại, tệp vẫn không có gì trong đó.

sw.append("CheckText"); 
PrintWriter out = new PrintWriter("file.txt"); 
out.println(sw.toString()); 
+0

Xem câu trả lời của tôi, nó cho thấy làm thế nào để sử dụng PrintWriter –

Trả lời

13

Làm thế nào về

FileWriter fw = new FileWriter("file.txt"); 
StringWriter sw = new StringWriter(); 
sw.write("some content..."); 
fw.write(sw.toString()); 
fw.close(); 

và bạn cũng có thể xem xét sử dụng một output stream mà bạn có thể trực tiếp chuyển cho template.process(data, os); thay vì viết đầu tiên vào một StringWriter sau đó vào một tập tin.

Xem API-doc cho số template.process(...) để tìm hiểu xem cơ sở đó có sẵn hay không.

Trả lời 2

template.process(Object, Writer) cũng có thể mất một đối tượng FileWriter, phù thủy là một lớp con của Writer, như tham số, vì vậy bạn có thể làm một cái gì đó như thế:

FileWriter fw = new FileWriter("file.txt");  
for(2 times) 
{ 
    template.process(data, fw); 
} 
fw.close(); 
+0

Nó không làm việc nhưng dữ liệu của tôi bị ghi đè mỗi khi vòng lặp thực hiện. Làm cách nào để nối thêm dữ liệu? –

+2

sử dụng hàm tạo khác của bộ ghi tệp 'FileWriter (" tệp.txt ", true)' tham số thứ hai cho biết dữ liệu không được cắt bớt khi mở, nội dung mới được nối thêm. Nhưng trong trường hợp của bạn, bạn nên mở tập tin trước khi vòng lặp và đóng nó một khi bạn đang thực hiện sau khi vòng lặp. – A4L

1

Tại sao không sử dụng FileWriter?

Mở tệp trước khi bạn lặp lại và tạo kết quả yêu cầu của bạn. Khi bạn viết cho FileWriter nó sẽ gắn liền với các bộ đệm và viết ra sản lượng tích lũy của bạn trên một close()

Lưu ý rằng bạn có thể mở một FileWriter trong ghi đè hoặc thêm chế độ, vì vậy bạn có thể thêm các tập tin hiện có .

Đây là a simple tutorial.

2

Bạn có thể sử dụng nhiều dòng khác nhau để ghi vào tập tin.

Cá nhân tôi thích làm việc với PrintWriterhere Bạn có thể lá cờ để nối thêm trong FileWriter (sự thật trong ví dụ sau):

try { 
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true))); 
    out.println(sw.toString()); 
    out.close(); 
} catch (IOException e) { 
    // Do something 
} 
Các vấn đề liên quan