Vai al contenuto

Java/Input e output

Wikibooks, manuali e libri di testo liberi.
Java
Linguaggio Java
Linguaggio Java
categoria · sviluppo · modifica

Come posso contribuire?
→ Vai su Wikiversity

Guida alla programmazioneJava/Introduzione - Specifica di linguaggioJava/Tipi di dato - Libreria standard

  1. Comunicazione serialeJava/Comunicazione seriale
  2. Stream
  3. Input e output su consoleJava/Input e output
  4. Java Collections Framework
  5. AWT e SwingJava/AWT e Swing
  6. Reflection
  7. SerializzazioneJava/Serializzazione
  8. SocketJava/Socket

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]

Lettura da console

[modifica | modifica sorgente]

Ci 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(→ javadoc), 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

[modifica | modifica sorgente]

Per 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 usare print(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.

  1. In realtà, tecnicamente, questi tre sono i campi statici della classe System che referenziano gli oggetti deputati a manipolare gli stream.

Questa pagina è uno stub Questo modulo è solo un abbozzo. Contribuisci a migliorarlo secondo le convenzioni di Wikibooks