Question

I googled for this for a while but can't seem to find it and it should be easy. I want to append a CR to then end of an XML file that I am creating with a Transformer. Is there a way to do this>

I tried the following but this resulted in a blank file?


Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "file:///ReportWiz.dtd");
xformer.transform(source, result);
OutputStream writer = new FileOutputStream(file);
Byte b = '\n';
writer.write(b);
writer.close();
Was it helpful?

Solution

Simple... just add the append option:

    new FileOutputStream(f, true /* append */);

OTHER TIPS

There are a couple of options here.

I assume that your result is a StreamResult that you are creating with a String specifying the destination file path. You might consider opening a FileOutputStream yourself, and constructing your StreamResult with that. Then, when the transformer is done, append the line terminator, flush, and close the stream. In the absence of constraints otherwise, I would use this approach.

If you want to re-open the file, as shown in the question, you'll need to use a FileOutputStream constructor that takes the optional append argument. Set this to true to avoid clobbering the result of the transform that was just completed.

You might also explore setting the indent output property in your transform, or including the necessary line terminator directly in your template.

The obvious answer is to use StreamResult with a Writer, and append your character to the writer before closing.

You appear to be trying to reopen the file to append the character. The two argument forms of the FileOutputStream constructors include an append flag.

I didn't know this Transformer class. But I see no connection between your writer/file variables and your xformer/source/result variables... Looks like you write only a newline.
Unless you omitted some essential part.

one note, make sure you write your newline character using the same character encoding you used for the xml serializaton, or your file will be broken.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top