ファイルを一気に出力 BufferedWriterを継承した何かを作る

では出力です
※こちらも書き換えました。エンコード方式を指定できるようになってます

public class BufferedWriterPlus extends BufferedWriter {

    public static String ISO2022JP = "ISO2022JP";
    public static String SJIS = "SJIS";
    public static String EUC_JP = "EUC_JP";
    public static String UTF_8 = "UTF-16";
    public static String UTF_16 = "ISO2022JP";

    /**
     * 文字型出力ストリームを作成します。エンコード方式には次のいずれかを指定します。<br> JISコード:"ISO2022JP"<br>
     * シフトJISコード:"SJIS"<br> 日本語EUCコード:"EUC-JP"<br> Unicode:"UTF-8", "UTF-16"
     *
     * @param file java.io.File
     * @param encode エンコード方式
     * @throws IOException
     */
    public BufferedWriterPlus(File file, String encode) throws IOException {
        super(new OutputStreamWriter(new FileOutputStream(file), encode));
    }

    /**
     * ArrayListのすべての要素ををファイルに出力します。要素ごとに改行されます。
     *
     * @param al
     * @throws IOException
     */
    public void write(ArrayList<String> al) throws IOException {
        for (int i = 0; i < al.size(); i++) {
            this.write(al.get(i) + "");
            this.newLine();
        }
    }

    /**
     * String配列のすべての要素ををファイルに出力します。要素ごとに改行されます。
     *
     * @param s
     * @throws IOException
     */
    public void write(String[] s) throws IOException {
        for (int i = 0; i < s.length; i++) {
            this.write(s[i] + "");
            this.newLine();
        }
    }
}


行数少ないですね。でもあるとメインのコードがすこし片付くというメリットもあるとかないとか
どちらもwriteという関数名(元からある1行書きだす関数もwrite)なんですがこれはメタモルフォーゼ(!?)といって引数の種類や数が違えば同名でもいいですよという仕組みです
この変数を使う時はどの関数だっけ?と考えずに放り込むだけで適切な処理ができるのでポリリズム(!!?)万歳という人が多いです