Sinceramente la tua ultima implementazione non mi sembra poi così efficiente!
Innanzitutto perchè effettui una scrittura su file per ogni numero , poi mi sembra che il tuo procedimento sia un po' troppo elaborato.
Per i problemi di sopra potresti risolvere inserendo ogni numero in un StringBuilder (dopo ogni numero ci metti un "a capo" , tranne magari per l'ultimo, per imitare lo scrivi.println di ogni numero) e scrivi in un unica volta l'intero file con sb.toString ()
La procedura da me prima postata può essere migliorata , come tu avevi fatto notare , nel seguente modo:
codice:
BufferedReader br = new BufferedReader (new InputStreamReader (new FileInputStream ("file.txt")));
String s;
String s1 = "";
int j;
while ((s=br.readLine ())!=null) {
s1+=s.replaceAll (" ","");
while ((j=s1.indexOf (",")) < s1.length () /*&& j>= 0*/ && (j+5) <= s1.length ()) {
System.out.println (s1.substring (0 , j + 5));
s1 = s1.substring (j + 5);
}
}
Io nel mio esempio procedo alla stampa su console , per il tuo caso (scrittura su file) dovresti sostituire i miei println (stringa) in sb.append (stringa + "\n") , il "\n" se non vuoi un "a capo finale lo levi con un controllo apposito , e poi procedi con uno scrivi.println (sb.toString ()) finale..
Ps. il codice non l'ho rigorosamente testato e controllato causa rincoglionimento da studio universitario profondo quindi stai attento a eventuali errori 