Java: как получить входные данные из System.console()
Я пытаюсь использовать класс Console для ввода ввода от пользователя, но нулевой объект возвращается, когда я вызываю System.console()
. Нужно ли мне что-то менять перед использованием System.console?
Console co=System.console();
System.out.println(co);
try{
String s=co.readLine();
}
Ответы
Ответ 1
Использование консоли для чтения ввода (можно использовать только вне 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.
Ответ 2
Scanner in = new Scanner(System.in);
int i = in.nextInt();
String s = in.next();
Ответ 3
Существует несколько способов чтения строки ввода с вашей консоли/клавиатуры. Следующий пример кода показывает, как читать строку с консоли/клавиатуры с помощью 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
. вы не можете получить экземпляр Console из System.console()
при запуске демонстрационного кода через Eclipse. Поскольку eclipse запускает ваше приложение как фоновый процесс, а не как процесс верхнего уровня с системной консолью.
Ответ 4
Это будет зависеть от вашей среды. Если вы используете Swing UI через javaw
, например, консоль не отображается. Если вы работаете в среде IDE, это будет очень сильно зависеть от конкретной обработки IDE консоли IO.
Из командной строки это должно быть хорошо. Пример:
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
).
Ответ 5
Нашел неплохой ответ на чтение с консоли, здесь другой способ использовать "Сканер" для чтения с консоли:
import java.util.Scanner;
String data;
Scanner scanInput = new Scanner(System.in);
data= scanInput.nextLine();
scanInput.close();
System.out.println(data);
Ответ 6
Попробуйте это. надеюсь, это поможет.
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();
Ответ 7
Следующее принимает ответ athspk и превращает его в одно, которое непрерывно циклически, пока пользователь не наберет "exit". Я также написал ответ , где я взял этот код и сделал его доступным для тестирования.
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.
Ответ 8
Я написал библиотеку Text-IO, которая может касаться проблемы с System.console(), являющейся нулевым при запуске приложения из в среде IDE.
Он вводит слой абстракции, аналогичный тому, который предложен McDowell.
Если 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.
Ответ 9
Использовать System.in
http://www.java-tips.org/java-se-tips/java.util/how-to-read-input-from-console.html