Esercitazione 2.2: comprendere I/O in JAVA
L'input è rappresentato dai dati che inviamo al programma dall'esterno. L'invio avviene mediante il canale di ricezione dei dati del programma.
Come viene letto l'input dalla tastiera?
In java esistono tre modi per leggere l'input:
- BufferedReader
- StringTokenizer
- Scanner
Osserva: la tastiera rappresenta lo standard input dei programmi.
La classe System è una classe del pacchetto base di java ed è una classe statica.
Le classi statiche non devono essere istanziate per essere usate. Questo perché lo spazio di allocazione è unico.
Es. System.out.println(“sono io!”); System sis = new System();
L'input è identificato dal flusso in System.in
# | Modificatore e tipo | Campo | Descrizione |
---|---|---|---|
1 | System | err | Il flusso di output di errore "standard" |
2 | System | in | Il flusso di input "standard" |
3 | System | out | Il flusso di output "standard" |
Class Scanner
La classe scanner rappresenta il modo più semplice per realizzare un programma java che prende l'input da un canale di caratteri. Questa classe appartiene al package java.util e possiede metodi per individuare e prelevare dal canale di input i tipi primitivi (byte,int,float,double,boolean e char) e le stringhe del linguaggio java.
La classe Scanner appartiene al package java.util quindi per usarla bisognerà inserire all’inizio del programma import java.util.Scanner;
I metodi per leggere i tipi primitivi sono elencati di seguito:
# | Classe | Metodo | Descrizione |
---|---|---|---|
1 | Scanner | nextInt() | legge dal canale una sequenza di caratteri fino allo spazio interpretandola come numero intero |
2 | Scanner | nextDouble() | legge dal canale una sequenza di caratteri fino allo spazio interpretandola come numero reale |
3 | Scanner | nextBoolean() | legge dal canale una sequenza di caratteri fino allo spazio interpretandola come un boolean |
4 | Scanner | nextBoolean() | legge dal canale una sequenza di caratteri fino allo spazio interpretandola come un boolean |
5 | Scanner | nextByte() | legge dal canale una sequenza pari ad un byte |
6 | Scanner | nextLine() | legge dal canale una sequenza di caratteri fino al carattere di nuova riga |
6 | Scanner | next() | legge dal canale i caratteri presenti |
System.out.println(“sono un intero”+p);
Usiamo questa istruzione in un programma
EsScanner.java
import java.util.Scanner;
public class EsScanner {
public static void main(String[] args) {
// crea l'oggetto scanner
Scanner scanner = new Scanner(System.in);
System.out.println("Inserisci il tuo nome ");
// ricevi la stringa immesso dall'utente
String Nome = scanner.next();
System.out.println("Inserisci la tua eta");
// ricevi il numero immesso dall'utente
int eta = scanner.nextInt();
System.out.println("Sono " +Nome+" "+eta+" anni");
//Chiudi l'oggetto scanner
scanner.close();
}
}
La classe Scanner ha un metodo close() per chiudere lo scanner aperto.
Anche se non chiamiamo esplicitamente il metodo close(), verrà invocata l’interfaccia Closeable, che chiude lo stream nella fase di terminazione del programma in esecuzione.
La chiura esplicita è buona norma e consente di liberare risorse, non più utili e di evitare l'accesso accidentale allo stream ormai in disuso dal programma.
Metodo close() dello scanner Esercitazione

Esercizio 1
Scrivere un programma Java che richiede e stampa la propria anagrafica (Nome,Cognome,Indirizzo,NumeroCivico,DatadiNascita,CodiceFiscale).
Esercizio 2
Scrivere un programma Java che richiede e stampa i dati di un libro (Titolo,Autore,Editore,Numerodipagine,Prezzo).
Esercizio 3
Scrivere un programma Java che richiede e stampa i dati di un corso (Materia, Argomento1, Argomento2, Argomento3,Docente,Prezzo).