Io non ho capito quale sia il problema del newLine.
Chiamare println() o chiamare print() aggiungendo il newLine non cambia assolutamente nulla. Anzi, la prima fa esattamente questo: scrive la riga passata e poi scrive anche un newLine.
I seguenti due codici sono perfettamente equivalenti, anzi, il primo è leggermente più efficente del secondo:
codice:
String miaStringa = "...";
// Primo codice
out.print( miaStringa );
out.print( System.getProperty("line.separator") );
// Secondo codice
out.println( miaStringa );
La differenza sta solo nello scrivere un'istruzione in più o in meno, ma, come già detto, i due codici sono perfettamente equivalenti.
Quindi, se a te interessa scrivere 10.000 parole nel file in un colpo solo invece di effettuare 10.000 scritture (che, effettivamente, ti evitano tanto overhead), allora memorizza tutto in un StringBuilder, dove, dopo ogni parola, aggiungi un newLine:
codice:
StringBuilder sb = new StringBuilder();
int count = 0;
// Qui comincerai il tuo ciclo di generazione delle password
String tuaPassword = ... ; // Generi la tua password
sb.append( tuaPassword );
sb.append( System.getProperty("line.separator") );
count++;
if (count >= 10000) {
pw.print( sb.toString() );
count = 0;
}
// Qui il tuo ciclo finisce, gestirai il residuo
Ciao.