This is not simple question.

If u going AND CAN write ur flat file on oracle server box (or some box,
that mapping as mount point on oracle server box) best decision --> UTL_FILE.

If u need place flat file on ANY client box, that execute SQLPLUS, u can't use UTL_FILE.
In this case u probably have to write some tools manually.