Java: как получить входные данные из System.console()
Я пытаюсь использовать класс консоли для получения ввода от пользователя, но при вызове возвращается нулевой объект System.console()
, Нужно ли что-то менять перед использованием System.console?
Console co=System.console();
System.out.println(co);
try{
String s=co.readLine();
}
9 ответов
Использование консоли для чтения ввода (можно использовать только вне IDE):
System.out.print("Enter something:");
String input = System.console().readLine();
Другой способ (работает везде):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter String");
String s = br.readLine();
System.out.print("Enter Integer:");
try{
int i = Integer.parseInt(br.readLine());
}catch(NumberFormatException nfe){
System.err.println("Invalid Format!");
}
}
}
System.console () возвращает нуль в IDE
так что если вам действительно нужно использовать System.console(), прочитайте это решение от McDowell.
Scanner in = new Scanner(System.in);
int i = in.nextInt();
String s = in.next();
Есть несколько способов прочитать строку ввода с вашей консоли / клавиатуры. В следующем примере кода показано, как читать строку с консоли / клавиатуры с помощью Java.
public class ConsoleReadingDemo {
public static void main(String[] args) {
// ====
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter user name : ");
String username = null;
try {
username = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("You entered : " + username);
// ===== In Java 5, Java.util,Scanner is used for this purpose.
Scanner in = new Scanner(System.in);
System.out.print("Please enter user name : ");
username = in.nextLine();
System.out.println("You entered : " + username);
// ====== Java 6
Console console = System.console();
username = console.readLine("Please enter user name : ");
System.out.println("You entered : " + username);
}
}
Последняя часть кода используется java.io.Console
учебный класс. Вы не можете получить экземпляр консоли от System.console()
при запуске демонстрационного кода через Eclipse. Потому что eclipse запускает ваше приложение как фоновый процесс, а не как процесс верхнего уровня с системной консолью.
Это будет зависеть от вашей среды. Если вы используете Swing UI через javaw
например, тогда нет консоли для отображения. Если вы работаете в IDE, это будет во многом зависеть от конкретной IDE, обрабатывающей консольный ввод-вывод.
Хотя из командной строки все должно быть хорошо. Образец:
import java.io.Console;
public class Test {
public static void main(String[] args) throws Exception {
Console console = System.console();
if (console == null) {
System.out.println("Unable to fetch console");
return;
}
String line = console.readLine();
console.printf("I saw this line: %s", line);
}
}
Запустите это только с java
:
> javac Test.java
> java Test
Foo <---- entered by the user
I saw this line: Foo <---- program output
Другой вариант заключается в использовании System.in
, который вы можете обернуть в BufferedReader
читать строки или использовать Scanner
(снова упаковка System.in
).
Нашел здесь хороший ответ относительно чтения с консоли, здесь другой способ использовать "Сканер" для чтения с консоли:
import java.util.Scanner;
String data;
Scanner scanInput = new Scanner(System.in);
data= scanInput.nextLine();
scanInput.close();
System.out.println(data);
Попробуй это. надеюсь, это поможет.
String cls0;
String cls1;
Scanner in = new Scanner(System.in);
System.out.println("Enter a string");
cls0 = in.nextLine();
System.out.println("Enter a string");
cls1 = in.nextLine();
Следующее принимает ответ athspk и превращает его в ответ, который непрерывно повторяется до тех пор, пока пользователь не введет "выход". Я также написал ответ, где взял этот код и сделал его тестируемым.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LoopingConsoleInputExample {
public static final String EXIT_COMMAND = "exit";
public static void main(final String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter some text, or '" + EXIT_COMMAND + "' to quit");
while (true) {
System.out.print("> ");
String input = br.readLine();
System.out.println(input);
if (input.length() == EXIT_COMMAND.length() && input.toLowerCase().equals(EXIT_COMMAND)) {
System.out.println("Exiting.");
return;
}
System.out.println("...response goes here...");
}
}
}
Пример вывода:
Enter some text, or 'exit' to quit
> one
one
...response goes here...
> two
two
...response goes here...
> three
three
...response goes here...
> exit
exit
Exiting.
Я написал библиотеку Text-IO, которая может решить проблему отсутствия значения System.console() при запуске приложения из среды IDE.
Он вводит уровень абстракции, подобный тому, который был предложен Макдауэллом. Если System.console() возвращает null, библиотека переключается на консоль на основе Swing.
Кроме того, Text-IO имеет ряд полезных функций:
- поддерживает чтение значений с различными типами данных.
- позволяет маскировать ввод при чтении конфиденциальных данных.
- позволяет выбрать значение из списка.
- позволяет указать ограничения на входные значения (шаблоны форматов, диапазоны значений, ограничения длины и т. д.).
Пример использования:
TextIO textIO = TextIoFactory.getTextIO();
String user = textIO.newStringInputReader()
.withDefaultValue("admin")
.read("Username");
String password = textIO.newStringInputReader()
.withMinLength(6)
.withInputMasking(true)
.read("Password");
int age = textIO.newIntInputReader()
.withMinVal(13)
.read("Age");
Month month = textIO.newEnumInputReader(Month.class)
.read("What month were you born in?");
textIO.getTextTerminal().println("User " + user + " is " + age + " years old, " +
"was born in " + month + " and has the password " + password + ".");
На этом изображении вы можете увидеть приведенный выше код в консоли на базе Swing.
Используйте System.in
http://www.java-tips.org/java-se-tips/java.util/how-to-read-input-from-console.html