2012-08-09 8 views
8

Ich habe eine StringWriter-Variable sw, die von einer FreeMarker-Vorlage aufgefüllt wird. Sobald ich die sw ausgefüllt habe, wie kann ich es in eine Textdatei drucken?In txt-Datei von StringWriter schreiben

Ich habe eine for-Schleife wie folgt:

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

Gerade jetzt, ich bin gerade erst auf dem Bildschirm ausgegeben werden. Wie mache ich das für eine Datei? Ich stelle mir vor, dass bei jeder Schleife meine sw geändert wird, aber ich möchte, dass die Daten aus jeder Schleife in der Datei zusammengefügt werden.

Bearbeiten: Ich habe den folgenden Code versucht. Wenn es ausgeführt wird, zeigt es, dass die file.txt geändert worden ist, aber wenn es neu lädt, enthält die Datei noch nichts.

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

Siehe meine Antwort, zeigt es, wie Printwriter verwenden –

Antwort

13

Wie wäre es

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

und Sie könnten auch erwägen einen Ausgangsstrom mit der Sie direkt in template.process(data, os); anstatt zuerst schriftlich auf einen String dann in eine Datei passieren kann.

Schauen Sie sich das API-Dokument für die template.process(...) an, um herauszufinden, ob eine solche Einrichtung verfügbar ist.

Antworten 2

template.process(Object, Writer) auch ein Filewriter Objekt nehmen kann, ist Hexe eine Unterklasse von Writer, als Parameter, so dass Sie wahrscheinlich so etwas tun kann:

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

Es funktioniert aber meine Daten werden jedes Mal überschrieben, wenn die Schleife ausgeführt wird. Wie füge ich Daten an? –

+2

Verwenden Sie den anderen Konstruktor von File Writer 'FileWriter (" file.txt ", true)' der zweite Parameter sagt, dass die Daten beim Öffnen nicht abgeschnitten werden dürfen, der neue Inhalt wird angehängt. Aber in Ihrem Fall sollten Sie die Datei vor der Schleife öffnen und sie schließen, sobald Sie nach der Schleife fertig sind. – A4L

1

Warum nicht eine FileWriter verwenden?

Öffnen Sie es, bevor Sie eine Schleife erstellen und die erforderliche Ausgabe generieren. Wie Sie auf den Filewriter schreiben werde es an den Puffer anhängen und Ihre gesammelten Ausgabe auf einem

Hinweis close() schreiben, dass Sie ein Filewriter in überschreiben oder anhängen Modus öffnen kann, so dass Sie an vorhandenen Dateien anhängen .

Hier ist a simple tutorial.

2

Du viele verschiedene Streams verwenden können in Datei schreiben.

ich persönlich gerne arbeiten PrintWriterhere Sie Flagge in der Filewriter (die wahre im folgenden Beispiel) anhängen:

try { 
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true))); 
    out.println(sw.toString()); 
    out.close(); 
} catch (IOException e) { 
    // Do something 
}