Java: как получить данные из System.console () - PullRequest
152 голосов
/ 10 января 2011

Я пытаюсь использовать консольный класс для получения ввода от пользователя, но при вызове System.console() возвращается нулевой объект.Нужно ли что-то менять перед использованием System.console?

Console co=System.console();
System.out.println(co);
try{
    String s=co.readLine();
}

Ответы [ 9 ]

231 голосов
/ 10 января 2011

Использование консоли для чтения ввода (можно использовать только вне 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 .

112 голосов
/ 10 января 2011
Scanner in = new Scanner(System.in);

int i = in.nextInt();
String s = in.next();
34 голосов
/ 28 августа 2014

Есть несколько способов прочитать строку ввода с вашей консоли / клавиатуры. В следующем примере кода показано, как читать строку с консоли / клавиатуры с помощью 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 запускает ваше приложение как фоновый процесс, а не как процесс верхнего уровня с системной консолью.

17 голосов
/ 10 января 2011

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

7 голосов
/ 27 марта 2014

Нашел хороший ответ относительно чтения с консоли, здесь можно использовать «Сканер» для чтения с консоли:

import java.util.Scanner;
String data;

Scanner scanInput = new Scanner(System.in);
data= scanInput.nextLine();

scanInput.close();            
System.out.println(data);
4 голосов
/ 25 сентября 2016

Попробуй это. надеюсь, это поможет.

    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(); 
3 голосов
/ 13 октября 2015

Далее принимается ответ 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.
2 голосов
/ 14 ноября 2016

Я написал библиотеку 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консоль.

1 голос
/ 10 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...