Read and Write User Input in Java – 在Java中读和写用户输入

最后修改: 2018年 7月 4日

中文/混合/英文(键盘快捷键:t)

1. Introduction

1.介绍

In this quick tutorial, we’ll demonstrate several ways to use a console for user input and output in Java.

在这个快速教程中,我们将演示在Java中使用控制台进行用户输入和输出的几种方法

We’ll have a look at a few methods of the Scanner class for handling input, and then we’ll show some simple output using System.out.

我们将看看Scanner的一些方法,以处理输入,然后我们将使用System.out展示一些简单的输出。

Finally, we’ll see how to use the Console class, available since Java 6, for both console input and output.

最后,我们将看到如何使用Console类,该类从Java 6开始可用,用于控制台输入和输出。

2. Reading from System.in

2.从System.in阅读

For our first examples, we’ll use the Scanner class in the java.util package to obtain the input from System.in — the “standard” input stream:

在我们的第一个例子中,我们将使用java.util包中的Scanner类,从System.in–“标准 “输入流中获取输入。

Scanner scanner = new Scanner(System.in);

Let’s use the nextLine() method to read an entire line of input as a String and advance to the next line:

让我们使用nextLine()方法来读取整行输入的字符串,并前进到下一行。

String nameSurname = scanner.nextLine();

We can also use the next() method to get the next input token from the stream:

我们还可以使用next() 方法从流中获得下一个输入标记

String gender = scanner.next();

If we’re expecting numeric inputs, we can use nextInt() to get the next input as an int primitive, and, similarly, we can use nextDouble() to get a variable of type double:

如果我们期待数字输入,我们可以使用nextInt()来获取作为int原语的下一个输入,同样,我们可以使用nextDouble()来获取double类型的变量。

int age = scanner.nextInt();
double height = scanner.nextDouble();

The Scanner class also offers hasNext_Prefix() methods which return true if the next token can be interpreted as a corresponding data type.

Scanner 类还提供了hasNext_Prefix() 方法,如果下一个标记可以被解释为相应的数据类型,则返回true

For example, we can use hasNextInt() method to check if the next token can be interpreted as an integer:

例如,我们可以使用hasNextInt()方法来检查下一个标记是否可以被解释为一个整数。

while (scanner.hasNextInt()) {
    int nmbr = scanner.nextInt();
    //...
}

Also, we can use the hasNext(Pattern pattern) method to check if the following input token matches a pattern:

另外,我们可以使用 hasNext(Pattern pattern) 方法来检查下面的输入标记是否与模式相匹配

if (scanner.hasNext(Pattern.compile("www.baeldung.com"))) {         
    //...
}

Besides using the Scanner class, we can also use an InputStreamReader with System.in to get the input from the console:

除了使用Scanner类,我们还可以使用InputStreamReaderSystem.in来获取控制台的输入

BufferedReader buffReader = new BufferedReader(new InputStreamReader(System.in));

And then we can read input and parse it to an integer:

然后我们可以读取输入并将其解析为一个整数。

int i = Integer.parseInt(buffReader.readLine());

3. Writing to System.out

3.写入System.out

For console output, we can use System.out — an instance of the PrintStream class, which is a type of OutputStream.

对于控制台输出,我们可以使用System.outPrintStream类的一个实例,它是OutputStream的一种类型。

In our example, we’ll use console output to provide a prompt for user input and display a final message to a user.

在我们的例子中,我们将使用控制台输出来提供用户输入的提示,并向用户显示最后的信息。

Let’s use the println() method to print a String and terminate the line:

让我们使用println()方法来打印一个String并终止该行

System.out.println("Please enter your name and surname: ");

Alternately, we can use the print() method, which works similarly to println(), but without terminating the line:

另外,我们可以使用print()方法,其工作原理类似于println(),但不终止行

System.out.print("Have a good");
System.out.print(" one!");

4. Using the Console Class for Input and Output

4.使用Console类进行输入和输出

In JDK 6 and later, we can use the Console class from java.io package to read from and write to the console.

在JDK 6及以后的版本中,我们可以使用来自java.io 包的Console 类来从控制台读取和写入。

To obtain a Console object, we’ll call System.console():

为了获得一个Console对象,我们将调用System.console()

Console console = System.console();

Next, let’s use the readLine() method of the Console class to write a line to the console and then read a line from the console:

接下来,让我们使用Console类的readLine()方法来写一行到控制台,然后从控制台读一行

String progLanguauge = console.readLine("Enter your favourite programming language: ");

If we need to read sensitive information, such as a password, we can use the readPassword() method to prompt a user for a password and read the password from the console with echoing disabled:

如果我们需要读取敏感信息,例如密码,我们可以使用readPassword()方法来提示用户输入密码并从控制台读取密码,同时禁用回声

char[] pass = console.readPassword("To finish, enter password: ");

We can also use the Console class to write output to the console, for example, using the printf() method with a String argument:

我们还可以使用Console类将输出写入控制台,例如,使用printf()方法,带String参数。

console.printf(progLanguauge + " is very interesting!");

5. Conclusion

5.结论

In this article, we showed how to use several Java classes to perform console user input and output.

在这篇文章中,我们展示了如何使用几个Java类来执行控制台用户输入和输出。

As always, the code samples from this tutorial are provided over on GitHub.

一如既往,本教程中的代码样本在GitHub上提供over