Есть ли способ открыть входной поток с помощью withReader? - Groovy - PullRequest
1 голос
/ 20 ноября 2011

Я знаю, что входной поток автоматически закрывается в конце этого вида блока в Groovy:

def exec = ""
System.in.withReader {
    println  "input: "
    exec = it.readLine()        
} 

но есть ли способ открыть поток, если я хочу сделать что-то подобное:

def exec = ""
while(!exec.equals("q")) {   
    System.in.withReader {
        println  "input: "
        exec = it.readLine()        
    } 
    if(!exec.equals("q")) {
        //do something
    }
}

Когда я пытаюсь это сделать, я получаю эту ошибку при втором выполнении цикла while:

Exception in thread "main" java.io.IOException: Stream closed

Так, каков был бы лучший способ достигнуть этого?

Спасибо.

1 Ответ

6 голосов
/ 20 ноября 2011

Вы не должны пытаться открыть System.in , так как вы не должны закрывать его в первую очередь.Вы можете попробовать что-то вроде следующего

def exec
def reader = System.in.newReader()

// create new version of readLine that accepts a prompt to remove duplication from the loop
reader.metaClass.readLine = { String prompt -> println prompt ; readLine() }

// process lines until finished
while ((exec = reader.readLine("input: ")) != 'q') {        
    // do something

}
...