No, what you have currently is much better than this.
So there are two issues here :

1) If init() throws an exception, and we get to finally block; how will writer.close() behave ?
a) Will it throw an exception ?
b) Will it ignore ? (I would hope this)
c) Is it undefined ? In which case we cant rely on this.

2) As part of executing the loop, where we are calling writer.write; it is possible for an exception to be thrown.
Which gets us to the finally block where we try to close the writer -> which can again throw an IOException (from what I recall about writer's javadoc).
Now what user will see in the logs will be the second exception - and the reason for that, the first writer.write exception (or some other in the try block) will be lost.

To handle (2), within the finally block, simply wrap the writer.close() in a try/catch and log the message & ignore there.
To handle (1), we will need to know what the expectation from init() is.