• ベストアンサー

exec を使ってcmdを動かす

現在、javaのexec関数を使ってcmdを実行したいのですが、うまく動作しなくて困っています。 ソースコードで説明すると、 try { Runtime r = Runtime.getRuntime(); Process p=       r.exec(newString[{"cmd.exe","/k","del","a.txt"}); } catch { } この様なソースでcmdを立ち上げて、a.txtというファイルを消去したいのですが、このプログラムを実際に動かすとa.txtはきえず、またcmdの画面も表示されません。 しかし、エラーは表示されずまたcmd.exeをnotpad.exeに変更するとちゃんとnotpadが立ち上がります。 どのあたりのソースがおかしいのでしょうか?ご指摘お待ちしております。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.2

Runtime.exec()でcmd.exeを実行しても、画面は表示されません。 cmd.exeの実行結果(標準出力)は、p.getInputStream()で得られる、 インプットストリームに出力されます。 (参考) http://www.ne.jp/asahi/hishidama/home/tech/java/process.html 今回は、単純に1コマンドを実行したいだけなので、 /kパラメータでなく、/cパラメータを使うべきです。 (/kを指定した場合、cmd.exeは自動的に停止しません。) ただ、指定ファイルが削除されない原因は、/kとは別の話で、 以下のような可能性が考えられると思います。 ・cmd.exe実行時のカレントフォルダがa.txtと別のフォルダになっている ・このJavaプログラムを実行しているユーザに、a.txtのファイルアクセス権がない 原因がよくわからなければ、p.getInputStream()およびp.getErrorStream() を取得すると、エラー原因が表示されている可能性があります。 それと、開示されたソースには文法エラーがあります。 newString[{"cmd.exe","/k","del","a.txt"} ↓ new String[]{"cmd.exe","/k","del","a.txt"} 実際にうまくいかないソースをコピペで貼り付けた方がよいと思います。

lain_003
質問者

お礼

お返事ありがとうございます。 色々試した結果、ここには書いていなかったのですが開発環境がEclipseだったのですが、コマンドプロンプトから直接コンパイルして実行すると消すことができました。 この関数で実行しても画面は表示されないのですか、勉強になりました。

その他の回答 (1)

回答No.1

>r.exec(newString[{"cmd.exe","/k","del","a.txt"}); これを r.exec(newString[{"cmd.exe","/k","del a.txt"}); かな? "del a.txt"で"cmd.exe"のひとつのオプションですから。

lain_003
質問者

補足

お返事ありがとうございます。 言われた通りやってみたんですが、a.txtはきえませんでした。 それに、/kで動作さしてるのにcmdの画面が表示されないのも気になります。 やはりcmdが立ち上がっていないのでしょうか?

関連するQ&A