Groovy Вход для чтения консоли
Я только начинаю изучать Groovy, и я экспериментирую в GroovyConsole.
Есть ли способ читать данные пользователя? Я пробовал код ниже, но я получаю сообщение об ошибке.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Input:"
input = br.readLine()
println "You entered: $input"
Это ошибка, которую я получаю:
Exception thrown
17-Apr-2012 02:52:39 org.codehaus.groovy.runtime.StackTraceUtils sanitize
WARNING: Sanitizing stacktrace:
java.io.IOException: Stream closed
Есть ли что-нибудь, что мне нужно импортировать?
Любая помощь будет большой.
Спасибо
Ответы
Ответ 1
Я попытался найти самый простой способ прочитать ввод данных из командной строки...
Я нашел ответ в другом месте, разместит здесь, чтобы документировать "реальный" Groovy способ, поскольку он все еще отсутствует:
def username = System.console().readLine 'What is your name?'
println "Hello $username"
Как говорит Ларри Блэйт, если вы используете консоль Groovy, обязательно посмотрите на фоновое "черное" окно для вывода и введите ввод.
ИЗМЕНИТЬ
В среде, где Console недоступен, например, запуск из вашей среды IDE, возможно, используйте это вместо:
println "What is your name?"
println "Your name is ${System.in.newReader().readLine()}"
Ответ 2
def readln = javax.swing.JOptionPane.&showInputDialog
def username = readln 'What is your name?'
println "Hello $username."
Ответ 3
Ваш код работает.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Input:"
def userInput = br.readLine()
println "You entered: $userInput"
Предполагая, что вы работаете в Windows, единственная проблема заключается в том, что ввод считывается с консоли в фоновом режиме, который запускается перед groovyconsole.
![enter image description here]()
Ответ 4
Вы можете попробовать что-то вроде этого, которое работает в командной строке любых o/s, но также и в GoovyConsole, где появляется диалог [как отмечено в предыдущем сообщении]:
def cons = System.console()
def yn
if (cons) {
yn = {((cons.readLine(it + " (y/n) ")?:"n").trim()?:"n")?.charAt(0).toLowerCase().toString() }
} else {
cons = javax.swing.JOptionPane.&showInputDialog
yn = {((cons(it + " (y/n) ")?:"n").trim()?:"n")?.charAt(0).toLowerCase().toString() }
}
if (yn("Did you want to do something?") == 'y')
...do something here!...
Ответ 5
если ваш System.console() имеет значение null, вы можете
Scanner scan = new Scanner(System.in);
String s = scan.nextLine()