2013-01-31 5 views
5

Esiste una classe di utilità in alcune librerie Java che offrono servizi come quelli di java.io.Console ma compatibili con il reindirizzamento delle pipe di Bash dell'input?java.io.Console - utility simile compatibile con il reindirizzamento stdin?

Il seguente codice:

import java.io.Console; 
public class Foo { 
    public static void main(String args[]) { 
    Console cons = System.console(); 
    String foo = cons.readLine(); // line-5 
    } 
} 

lancerà una NPE on line-5 quando si fa una:

echo "test" | java Foo 

Questo è anche menzionato in this SO discussion senza offrire alcuna alternativa salvo l'uso di sistema. in.

+0

Cosa c'è di sbagliato nell'usare 'System.in' qui? Dopo tutto quello che è esattamente quello che stai cercando: il flusso di input del sistema (noto anche come 'stdin'). –

+0

Non c'è niente di sbagliato in System.in Mi stavo chiedendo se potevo avere la mia torta e mangiarla anch'io .. –

risposta

3

provare quanto segue:

caratteristiche
import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class Foo { 
    public static void main(String args[]) throws Exception { 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     String foo = in.readLine(); // line-5 
     System.out.println(foo); 
    } 
} 

la password relativi dovrebbe essere fatto manualmente.