Originariamente inviato da raff5184
Avevo pensato ad una classe che fornisce diversi metodi, uno per contare le righe, uno per le parole e un altro per i caratteri.

Siccome devo leggere più volte il testo avevo pensato di fare una prima scansione di tutto il file e memorizzare le info lette in un vector.
Se non ci sono altri motivi o altri requisiti particolari che ovviamente non posso conoscere, allora ti dico subito che non devi necessariamente leggere il file più volte e nemmeno devi avere per forza più metodi per gestire i singoli conteggi.

Ti basta leggere il file "a righe" (ad esempio con readLine() di BufferedReader) e con ogni riga ovviamente conteggi già le righe e poi analizzi la stringa della riga per determinare gli altri dati, cioè numero di caratteri e numero di parole. Per i caratteri non so se intendi che siano compresi tutti i caratteri (nel qual caso basta un length()) e per le parole non hai specificato quali siano i possibili separatori delle parole (solo spazi?). Comunque basta usare un StringTokenizer.

Per il "design" delle classi potrei consigliarti di fare una classe che non ha nulla a che fare con l'I/O ma che si occupa solamente di rappresentare e gestire i dati del conteggio. Avrebbe 3 proprietà (i contatori) e i soliti metodi getter per leggerli dall'esterno. Poi potrebbe avere un metodo es. analizzaRiga(String riga) che analizza la riga e aggiorna i 3 contatori.

Il resto, input del nome del file, gestione dell'I/O potresti farlo in una classe principale, quella che hai il main.