Defines an object which can return an output stream, and hence
represents the potential destination of a stream of data.
It is used in preference to an OutputStream so that you can
avoid opening output files before you know you need them,
so you don't get new empty files (possibly overwriting old ones)
when a command fails.