Java/Input e output
Per comunicare con la console si usano i tre stream System.in, System.out e System.err (rispettivamente standard input stream, standard output stream, standard error stream).[1]
Java |
categoria · sviluppo · modifica |
Guida alla programmazioneJava/Introduzione - Specifica di linguaggioJava/Tipi di dato - Libreria standard |
Lettura da console
modificaCi sono almeno due modi di leggere l'input da terminale. L'oggetto System.in fornisce accesso allo stream che rappresenta i caratteri inseriti tramite tastiera, ma per manipolarlo in modo specifico è necessario racchiuderlo in un altro oggetto come di seguito indicato.
- Primo modo
Un modo è usare un oggetto InputStreamReader
come segue:
java.io.BufferedReader console = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
String riga = console.readLine();
// ...
Questo permette di leggere una riga di testo alla volta. La stringa restituita può essere analizzata ad es. con uno StringTokenizer:
// continua dall'esempio precedente
java.util.StringTokenizer tokens = new java.util.StringTokenizer(riga);
// ... usa i metodi dell'oggetto tokens
Qui la lista dei metodi che possono essere invocati sull'oggetto StringTokenizer.
- Secondo modo
Un modo alternativo è usare uno java.util.Scanner
, creato in questo modo:
Scanner input = new Scanner (System.in);
Esempio 1
if (input.hasNextInt()) {
int numero = input.nextInt();
System.out.println("Hai scritto " + numero);
} else {
System.out.println("Non hai inserito un numero");
}
Esempio 2
int numero1, numero2, somma;
System.out.print("Inserisci il primo numero:\n");
numero1 = input.nextInt();
System.out.print("Inserisci il secondo numero\n");
numero2 = input.nextInt();
somma = numero1 + numero2;
System.out.printf("la somma è %d\n", somma );
Qui l'elenco dei metodi che possono essere invocati sull'oggetto Scanner. Quelli più utili sono sicuramente i metodi che hanno un nome del tipo hasNextXXX
o nextXXX
.
Scrittura su console
modificaPer scrivere delle righe sul terminale si usa il metodo System.out.println()
, in questo modo:
System.out.println("Hello world");
System.out.println("3 più 5 fa " + (3+5) + ".");
Per un elenco completo dei metodi supportati, fare riferimento alla classe PrintStream
.
In particolare, i metodi più frequentemente utilizzati sono:
println
: stampa una stringa e ritorna a capo sul terminale (equivale ad usareprint(stringa + "\n")
).print
: stampa una stringa, senza tornare a capo.formatf
: introdotto dalla versione 5 della piattaforma, ha lo stesso scopo dell'omonima funzione del linguaggio C.
Si noti che nella stringa si può inserire sia del testo, delimitato da delle virgolette, che dei numeri, che verranno convertiti in caratteri e mostrati in forma "umana", nonché valori booleani, che verranno mostrati come true
o false
.
Si possono anche inserire degli oggetti, che verranno mostrati come stringhe richiamando il loro metodo toString()
, in questo modo:
class Auto{
String modello="Lamborghini";
int benzina=2;
//metodi vari...
public String toString(){
return "modello="+modello+" q.tà benzina="+benzina;
}
}
public class esegui{
static void main(String argc[]){
Auto miaAuto=new Auto();
System.out.println("l'auto è "+miaAuto);
}
}
Questo codice mostrerà:
l'auto è modello=Lamborghini q.tà benzina=2
perché nel momento in cui richiedo di mostrare un oggetto come testo, viene chiamato il metodo toString di quell'oggetto (che deve essere dichiarato come String e non richiedere argomenti) e viene usata la stringa restituita.
Note
modifica- ↑ In realtà, tecnicamente, questi tre sono i campi statici della classe System che referenziano gli oggetti deputati a manipolare gli stream.