Вопрос-ответ

Java: How to get input from System.console()

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() возвращает null в 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 класс. вы не можете получить экземпляр консоли из System.console() при запуске демонстрационного кода через Eclipse. Потому что eclipse запускает ваше приложение как фоновый процесс, а не как процесс верхнего уровня с системной консолью.

Ответ 4

Это будет зависеть от вашей среды. Например, если вы запускаете 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).

java