• ベストアンサー

ディレクトリを変更して外部コマンド実行

いつもお世話になってます。 Runtime.execを使用してディレクトリ情報を txtファイルに出力しようとしているのですが、 現在のカレントディレクトリのものは出力できるのですが、 例えば、dドライブのtestフォルダに移動して 出力というのをどうやればいいのかわかりません。 ネットでいろいろ調べてみたものの、どうしてもわかりませんでした。 よろしくお願いします。 下記はカレントディレクトリの情報をそのままtxtファイルに出力したものです。 String command2 = "cmd /c dir > d:\\testest.txt"; Process process = Runtime.getRuntime().exec(command2);

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.3

 こんにちは。 try {   Process process = Runtime.getRuntime().exec("cmd /K cd /d d:");   PrintWriter pw = new PrintWriter(process.getOutputStream(), true);   pw.println("dir > testest.txt");   pw.println("exit");   //↑これは余分かも   pw.close(); } catch (IOException ex) {   ex.printStackTrace(); }  こんなふうにしたら、できました。  でも、素直に Runtime.getRuntime().exec("cmd /C dir d:\\ > d:\\testest.txt");  こっちのほうが早いかも。

coroco
質問者

お礼

ありがとうございます!できました! どちらでもできたのですが、cdで移動して、外部コマンド実行ができるかどうか知りたかったので、本当に良かったです。 回答していただいた皆様ほんとうにありがとうございました。

coroco
質問者

補足

 PrintWriter pw = new PrintWriter(process.getOutputStream(), true);  pw.println("dir > testest.txt"); このように書くことができるのも勉強になりました。 意味をよく理解したいと思います。

その他の回答 (3)

  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.4

 #3です。 >例えば、dドライブのtestフォルダに移動して  すみません。よく読んでなかったです。  訂正です。 "cmd /K cd /d d:" → "cmd /K cd /d d:\\test" "dir > testest.txt" → "dir > test.txt"

  • T0ngT0ng
  • ベストアンサー率40% (8/20)
回答No.2

Runtimeクラスのexecで以下の、引数3個のものを使えばよいのではないかと思います。 exec(String command, String[] envp, File dir) 3番目が実行ディレクトリになります。 2番目は環境変数ですので、特に指定しない(親プロセスと同じ) 場合はNULLを指定してください。

coroco
質問者

お礼

これが使えるのかなと思いましたが、環境変数はどうすればよいのだろうと思っていました。 nullを指定して試してみたいと思います。ありがとうございました!

回答No.1

…ちょっと試してみましたが、無理そうですね…。 もしかしたらできるかもしれませんが…。 Runtime.getRuntime().exec(cmd1); //ディレクトリ移動 Runtime.getRuntime().exec(cmd2); //ディレクトリ情報出力 としても、 cmd1の実行が完了した時点でプロセスが終了してしまうので、cmd2を実行するときはまた新たなプロセスが生成されるからだと思います。 つまり、イメージ的には ・コマンドプロンプトを開いてcmd1を実行してコマンドプロンプトを閉じる ・また新たにコマンドプロンプトを開いてcmd2を実行してコマンドプロンプトを閉じる という感じでしょうか。 もし、ファイルサイズ、更新日時、ディレクトリかファイルかという情報がいらなくて、単にフィル名を出力したいというのであれば、treeコマンドを使用してはいかがでしょうか? もしくはちょっと面倒ですが、java.io.Fileクラスを使って情報を出力するとか。

coroco
質問者

お礼

カレントディレクトリを移動して実行というのを 行いと思っています。 java.io.Fileクラスを使って情報の出力も勉強したいと思います。回答ありがとうございました!

関連するQ&A