2016-10-30 10 views
0

javaを使用してコマンドプロンプトで "time"コマンドを実行する必要があります。問題は、時間を表示した後、新しい時間を設定するよう求めていることです。 "dir"や "cd"や "ver"のようなコマンドを正常に実行できます。しかし、 "date"や "time"のようなユーザからの入力を要求するコマンドは完全に実行できません。ここでは、コードは次のとおりです。javaを使用してcmdで "time"コマンドを実行

try { 
    Process p = Runtime.getRuntime().exec("cmd /c time"); 
    p.waitFor(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = reader.readLine(); 
    while (line != null) { 
     System.out.println(line); 
     line = reader.readLine(); 
    } 
} catch (IOException e1) {} catch (InterruptedException e2) {} 

私はCMD以来、それはストリームがまだ終了していないことを考えて、そのプログラムの実行が停止したことがないので、したがって、それは入力ストリームで読み取ることができない、入力を求めていると思われます。 それで、私が探しているのは、新しい時間を入力して、それがある場合にはその出力を表示する方法です。

+0

実行されたバッチコマンドに*/t *オプションを追加できますか? –

+0

なぜですか? Javaをネイティブに使用して時間を稼ぐAPIを使用してみませんか? –

+0

@MarioSantiniは、ユーザーが新しい時刻を入力することを許可しません。そして私は新しい時間に入ることができるようにしたい。 –

答えて

1

唯一の懸念事項が最初の出力である場合は、プロセスが終了するのを待つべきではありません(p.waitFor())。代わりに入力ストリームを取得し、ラインを読み込みます。以下のコード。

try { 
     String [] commands = {"cmd.exe","/C","time"}; 
     Process p = Runtime.getRuntime().exec(commands); 
     OutputStream out = p.getOutputStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = reader.readLine(); // read the first line 
     System.out.println(line); 

     // write to ouput 
     out.write("sample".getBytes()); 
     out.flush(); 
     line = reader.readLine(); 
     System.out.println(line); 
     line = reader.readLine(); 
     System.out.println(line); 
     p.destroy(); 
    } catch (IOException e1) {} 
+0

これで私は新しい時間を入力することができません。そして私は新しい時間に入ることができるようにしたい。 –

+1

あなたは基本的にoutputstreamを必要とし、新しい時間を書き込むことができます。 – johnII

関連する問題