Java 中的控制台 I/O

Java Console 类用于从控制台获取输入。
它提供了读取文本和密码的方法。
如果我们使用 Console 类读取密码,则不会向用户显示。
java.io.Console 类在内部与系统控制台相连。

Java如何从控制台读取用户输入

Using BufferedReader:
System.out.println("Please type your name and press Enter.");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
     String name = reader.readLine();
     System.out.println("Hello, " + name + "!");
} catch(IOException e) {
     System.out.println("An error occurred: " + e.getMessage());
}

此代码需要以下导入:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

使用Scanner:

版本 ≥ Java SE 5

System.out.println("Please type your name and press Enter");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");

此示例需要以下导入:

import java.util.Scanner;

要读取多行,请重复调用Scanner.nextLine():

System.out.println("Please enter your first and your last name, on separate lines.");
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
System.out.println("Hello, " + firstName + " " + lastName + "!");

有两种获取字符串的方法,next() 和 nextLine()。
next() 返回第一个空格之前的文本(也称为“标记”),nextLine() 返回用户输入的所有文本,直到按下 Enter。

Scanner 还提供了用于读取 String 以外的数据类型的实用方法。
这些包括:

scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBoirnteger();
scanner.nextBigDecimal();

如果流具有更多请求类型,则将这些方法中的任何一个加上 has(如在 hasNextLine()、hasNextInt() 中)返回 true。
注意:如果输入不是请求的类型(对于
例如,为 nextInt() 键入“a”)。
我们可以使用 try {} catch() {} 来防止这种情况

Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US);             //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
    float fValue = scanner.nextFloat(); //retrive the value directly as float
    System.out.println(fValue + " is a float");
}else{
    String sValue = scanner.next(); //We can not retrive as float
    System.out.println(sValue + " is not a float");
}

使用 System.console:

版本 ≥ Java SE 6

String name = System.console().readLine("Please type your name and press Enter%n");
System.out.printf("Hello, %s!", name);
//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();

优点:

  • 读取方法是同步的
  • 可以使用格式字符串语法
日期:2020-06-02 22:15:16 来源:oir作者:oir