2012-08-09 13 views
8

Tengo una variable StringWriter, sw, que está poblada por una plantilla de FreeMarker. Una vez que haya rellenado el sw, ¿cómo puedo imprimirlo en un archivo de texto?Escribiendo al archivo txt desde StringWriter

que tienen un bucle de la siguiente manera:

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

En este momento, ya solo queda dar salida sólo a la pantalla. ¿Cómo hago esto para un archivo? Me imagino que con cada ciclo, mi sw cambiará, pero quiero que los datos de cada ciclo se agreguen juntos en el archivo.

Edit: He intentado el código a continuación. Cuando se ejecuta, muestra que se ha cambiado file.txt, pero cuando vuelve a cargar, el archivo todavía no tiene nada.

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

Ver mi respuesta, se muestra cómo utilizar PrintStream –

Respuesta

13

¿Qué tal

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

y también se podría considerar el uso de una corriente de salida que se puede pasar directamente a template.process(data, os); lugar de primera escritura a un StringWriter a continuación en un archivo.

Consulte el API-doc para el template.process(...) para averiguar si dicho servicio está disponible.

Responder 2

template.process(Object, Writer) también puede tener un objeto FileWriter, bruja es una subclase de escritor, como parámetro, lo que probablemente puede hacer algo así:

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

No funciona pero mis datos se sobrescriben cada vez que se ejecuta el ciclo. ¿Cómo añado datos? –

+2

use el otro constructor del archivador 'FileWriter (" file.txt ", true)' el segundo parámetro le dice a usted que los datos no se deben truncar al abrir, se agrega el nuevo contenido. Pero en su caso, debe abrir el archivo antes del bucle y cerrarlo una vez que haya terminado después del bucle. – A4L

1

¿Por qué no utilizar un FileWriter?

Ábrala antes de repetir y generar la salida requerida. A medida que se escribe en la FileWriter que va a anexar a la memoria intermedia y escribir su salida acumulada en una nota close()

que puede abrir una FileWriter en sobrescribir o anexar modo, por lo que puede añadir a los archivos existentes .

Aquí está a simple tutorial.

2

Puede utilizar muchas corrientes diferentes para escribir en el archivo.

Personalmente, me gusta trabajar con PrintWriterhere Puede bandera para anexar en el FileWriter (el verdadero en el siguiente ejemplo):

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