2012-08-09 24 views
8

Ho una variabile StringWriter, sw, che è popolata da un modello di FreeMarker. Una volta che ho popolato il sw, come posso stamparlo su un file di testo?Scrittura su file txt da StringWriter

Ho un ciclo for come segue:

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

In questo momento, sto solo l'output solo lo schermo. Come faccio questo per un file? Immagino che con ogni ciclo, il mio sw venga modificato, ma voglio che i dati di ogni ciclo vengano aggiunti insieme nel file.

Modifica: Ho provato il codice qui sotto. Quando viene eseguito, mostra che lo file.txt è stato modificato, ma quando si ricarica, il file non contiene ancora nulla.

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

Vedere la mia risposta, mostra come utilizzare PrintWriter –

risposta

13

Come su

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

e anche si potrebbe considerare l'utilizzo di un flusso di output che è possibile passare direttamente al template.process(data, os); invece di prima scrittura ad uno StringWriter poi in un file.

Guarda il documento API per lo template.process(...) per scoprire se tale servizio è disponibile.

risposta 2

template.process(Object, Writer) può anche prendere un oggetto FileWriter, strega è una sottoclasse di scrittore, come parametro, in modo probabilmente si può fare qualcosa di simile:

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

E funziona ma i miei dati vengono sovrascritti ogni volta che il ciclo viene eseguito. Come appendo i dati? –

+2

usa l'altro costruttore di file writer 'FileWriter (" file.txt ", true)" il secondo parametro dice che i dati non devono essere troncati all'apertura, il nuovo contenuto viene aggiunto. Ma nel tuo caso dovresti aprire il file prima del ciclo e chiuderlo una volta terminato il ciclo. – A4L

1

Perché non utilizzare uno FileWriter?

Aprilo prima del ciclo e genera l'output richiesto. Come si scrive alla FileWriter che sarà accoda al buffer e scrivere la vostra uscita accumulata su un close()

Si noti che è possibile aprire un FileWriter in sovrascrivere o accodare modalità, in modo da poter aggiungere al file esistenti .

Ecco il numero a simple tutorial.

2

È possibile utilizzare molti diversi flussi scrivere in un file.

personalmente mi piace lavorare con PrintWriterhere Puoi bandiera di aggiungere nel FileWriter (il vero nel seguente esempio):

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