2011-12-06 4 views
0

私はJavaでUNIX端末エミュレータを作成しようとしています。私は多くの問題を抱えています。私はプログラムの作業ディレクトリを変更できるので、 "cd"のようなコマンドは正しく動作していないようには思えません。私の質問はこれです。ユーザーからの入力が必要なコマンドを実行すると、その入力を実行中のプロセスに送信する方法はありますか?Java Unix Terminal

おかげさまで、多くの助けがありました。次に例を示します。 InputStream in = null; OutputStream outS = null;

StringBuffer commandResult = new StringBuffer(); 
    String line = null; 
    int readInt; 


    p = Runtime.getRuntime().exec("gksudo apt-get install firefox"); 

    int returnVal = p.waitFor(); 


    in = p.getInputStream(); 



    while ((readInt = in.read()) != -1) 
     commandResult.append((char)readInt); 
    outS = (BufferedOutputStream) p.getOutputStream(); 
    outS.write("Y".getBytes()); 
    outS.close(); 

    System.out.println(commandResult.toString()); 
    in.close(); 

これが出力されます:

Reading package lists... 
Building dependency tree... 
Reading state information... 
The following packages were automatically installed and are no longer required: 
    libmono2.0-cil libmono-data-tds2.0-cil libmono-system-data2.0-cil 
    libdbus-glib1.0-cil librsvg2-2.18-cil libvncserver0 libsqlite0 
    libmono-messaging2.0-cil libmono-system-messaging2.0-cil 
    libmono-system-data-linq2.0-cil libmono-sqlite2.0-cil 
    libmono-system-web2.0-cil libwnck2.20-cil libgnome-keyring1.0-cil 
    libdbus1.0-cil libmono-wcf3.0-cil libgdiplus libgnomedesktop2.20-cil 
Use 'apt-get autoremove' to remove them. 
The following extra packages will be installed: 
    firefox-globalmenu 
Suggested packages: 
    firefox-gnome-support firefox-kde-support latex-xft-fonts 
The following NEW packages will be installed: 
    firefox firefox-globalmenu 
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded. 
Need to get 15.2 MB of archives. 
After this operation, 30.6 MB of additional disk space will be used. 
Do you want to continue [Y/n]? Abort. 

は、なぜそれが "Y" でパイプ私ができる前に中止されましたか?

+0

プロセスから取得した出力ストリームを使用して、ユーザーからの入力をプロセスにパイプすることができます。 – srkavin

答えて

2

はい。 Process#getOutputStream()を参照してProcessオブジェクトの標準入力(標準入力)ストリームを取得してください。

ディレクトリの変更の問題については、JVMが起動した後にJVMが作業ディレクトリを変更できるとは思われません。しかし、あなたのプログラムは、 "現在の作業ディレクトリ"の考え方を、その場所に関連するもの(例えば、プロセスの起動、ディレクトリの内容の一覧表示など)を行うときに使用する変数としてモデル化することができます。 ProcessBuilder classには、プロセスが生成する方法がset the working directoryになっています。