在Java中,有三种方法可以从控制台读取输入:
- System.console(JDK 1.6)
- 扫描仪(JDK 1.5)
- BufferedReader + InputStreamReader(经典)
1. System.console
从JDK 1.6开始,开发人员开始切换到更简单,功能更强大的java.io.Console
类。
JavaConsole.java
package com.mkyong.io;
import java.io.Console;
public class JavaConsole {
public static void main(String[] args) {
Console console = System.console();
String input = "";
while (!"q".equalsIgnoreCase(input)) {
System.out.print("Enter something (q to quite): ");
input = console.readLine();
System.out.println("input : " + input);
}
System.out.println("bye bye!");
}
}
System.console()
将在IDE中返回null,从而在控制台或终端中手动运行该类。
~/projects/target/classes$ java com.mkyong.io.JavaConsole
Enter something (q to quite): hello 123
input : hello 123
Enter something (q to quite): hello Java
input : hello Java
Enter something (q to quite): mkyong
input : mkyong
Enter something (q to quite): q
input : q
bye bye!
PS更多Java System.console()示例。
2.扫描仪
在JDK 1.6之前,这是从控制台读取输入的Scanner
。
JavaScanner.java
package com.mkyong.io;
import java.util.Scanner;
public class JavaScanner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
while (!"q".equalsIgnoreCase(input)) {
System.out.print("Enter something (q to quite): ");
input = scanner.nextLine();
System.out.println("input : " + input);
}
System.out.println("bye bye!");
}
}
Enter something (q to quite): hello mkyong
input : hello mkyong
Enter something (q to quite): jdk 1.5
input : jdk 1.5
Enter something (q to quite): exit
input : exit
Enter something (q to quite): q
input : q
bye bye!
PS更多Java扫描器示例示例。
3. BufferedReader + InputStreamReader
在过去的JDK 1.1中,我们使用BufferedReader + InputStreamReader
从控制台读取输入。
JavaBufferedReaderClassic.java
package com.mkyong.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class JavaBufferedReaderClassic {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
while (!"q".equalsIgnoreCase(input)) {
System.out.print("Enter something (q to quite): ");
input = br.readLine();
System.out.println("input : " + input);
}
System.out.println("bye bye!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
JDK 1.7 try-with-resources
JavaBufferedReader.java
package com.mkyong.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class JavaBufferedReader {
public static void main(String[] args) {
// jdk 1.7
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
String input = "";
while (!"q".equalsIgnoreCase(input)) {
System.out.print("Enter something (q to quite): ");
input = br.readLine();
System.out.println("input : " + input);
}
System.out.println("bye bye!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
参考文献
- 控制台JavaDoc
- 扫描器JavaDoc
- Java –如何从System.console()中读取输入
- Java –如何使用扫描仪从控制台读取输入
- Java扫描仪示例
- Java 7 try-with-resources示例
翻译自: https://mkyong.com/java/how-to-read-input-from-console-java/