Pobieranie danych od użytkownika - Basic I/O

 

Pobieranie pojedynczych znaków z klawiatury - System.in.read():

import java.lang.*;

public class SystemInReadTest1 {
   public static void main( String[] args ) throws Exception { 
      outer:
      while (true)
      {
         System.out.println( "Start..." );
         while (true)
         {
            System.out.println("Naciśnij n - \"nowy obieg\" lub k - \"koniec\".");
            int ch = System.in.read();
            while( System.in.read() != '\n' );            
            if (ch == 'n')
               break;
            if (ch == 'k')
               break outer;
         }
      }

   }

}

 

 

Klasa Scanner

Przykład użycia klasy java.util.Scanner do analizowania strumienia wejściowego i pobierania prostych typów danych oraz ciągów znaków. Skaner dzieli strumień wejściowy na fragmenty (tokeny), używając określonych znaków separatora, którymi domyślnie są spacje. Następnie, poszczególne fragmenty mogą zostać pobrane i skonwertowane na różne typy danych przy użyciu odpowiednich metod next... (np. nextBoolean(), nextInt(), nextBigInteger() albo nextLine() itp.).

Szczegółowy opis klasy Scanner: https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html

Przykład - dla uproszczenia bez uwzględnienia obsługi wyjątków - patrz Wyjątki - Exceptions:

import java.util.*;

public class UserInputReader {

	static Scanner sc = new Scanner( System.in );

	public static void main(String[] args) {
		String str = "Hello!\n To jest drugi wiersz.";

		// create a new scanner with the specified String Object
		Scanner scanner = new Scanner( str );

		// print the next line
		System.out.println( scanner.nextLine() );

		// check if there is a next line again
		System.out.println( scanner.hasNextLine() );

		// print the next line
		System.out.println( scanner.nextLine() );

		// check if there is a next line again
		System.out.println( scanner.hasNextLine() );

		// close the scanner
		scanner.close();


		System.out.print("Podaj imię: ");
		String userInput = getUserTextInput();

		System.out.println( "Twoje imię: " + userInput );

		System.out.print("Podaj wartość całkowitą: ");
		System.out.println( sc.nextInt() );

	}

	public static String getUserTextInput() {
	    return sc.nextLine();
	}   
}

 

Wynik:

Hello!
true
 To jest drugi wiersz.
false
Podaj imię: 

Teraz program czeka, aż użytkownik wprowadzi wiersz danych.

Po wprowadzeniu danych zostaną one wyświetlony w kolejnym wierszu:

Hello!
true
 To jest drugi wiersz.
false
Podaj imię: hhhahaha
hhhahaha

Następnie użytkownik będzie mógł wprowadzić wartość całkowitą...

UWAGA! Ta wersja programu nie jest odporna na podanie nieprawidłowego typu danych. Jeśli zamiast wartości całkowitej wprowadzisz np. łańcuch zwykłych znaków, wówczas wystąpi wyjątek (EXCEPTION). Informacje o obsludze wyjątków znajdziesz w następnej sekcji Wyjątki - Exceptions.

 

Użycie klasy InputStreamReader opakowanej w klasę BufferedReader - patrz przykładowy program ExceptionTestProgram5 w następnej sekcji Wyjątki - Exceptions.