- ベストアンサー
ディレクトリを変更して外部コマンド実行
いつもお世話になってます。 Runtime.execを使用してディレクトリ情報を txtファイルに出力しようとしているのですが、 現在のカレントディレクトリのものは出力できるのですが、 例えば、dドライブのtestフォルダに移動して 出力というのをどうやればいいのかわかりません。 ネットでいろいろ調べてみたものの、どうしてもわかりませんでした。 よろしくお願いします。 下記はカレントディレクトリの情報をそのままtxtファイルに出力したものです。 String command2 = "cmd /c dir > d:\\testest.txt"; Process process = Runtime.getRuntime().exec(command2);
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 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"); こっちのほうが早いかも。
その他の回答 (3)
- PecoPlus
- ベストアンサー率76% (144/188)
#3です。 >例えば、dドライブのtestフォルダに移動して すみません。よく読んでなかったです。 訂正です。 "cmd /K cd /d d:" → "cmd /K cd /d d:\\test" "dir > testest.txt" → "dir > test.txt"
- T0ngT0ng
- ベストアンサー率40% (8/20)
Runtimeクラスのexecで以下の、引数3個のものを使えばよいのではないかと思います。 exec(String command, String[] envp, File dir) 3番目が実行ディレクトリになります。 2番目は環境変数ですので、特に指定しない(親プロセスと同じ) 場合はNULLを指定してください。
お礼
これが使えるのかなと思いましたが、環境変数はどうすればよいのだろうと思っていました。 nullを指定して試してみたいと思います。ありがとうございました!
- pcbeginner
- ベストアンサー率46% (261/560)
…ちょっと試してみましたが、無理そうですね…。 もしかしたらできるかもしれませんが…。 Runtime.getRuntime().exec(cmd1); //ディレクトリ移動 Runtime.getRuntime().exec(cmd2); //ディレクトリ情報出力 としても、 cmd1の実行が完了した時点でプロセスが終了してしまうので、cmd2を実行するときはまた新たなプロセスが生成されるからだと思います。 つまり、イメージ的には ・コマンドプロンプトを開いてcmd1を実行してコマンドプロンプトを閉じる ・また新たにコマンドプロンプトを開いてcmd2を実行してコマンドプロンプトを閉じる という感じでしょうか。 もし、ファイルサイズ、更新日時、ディレクトリかファイルかという情報がいらなくて、単にフィル名を出力したいというのであれば、treeコマンドを使用してはいかがでしょうか? もしくはちょっと面倒ですが、java.io.Fileクラスを使って情報を出力するとか。
お礼
カレントディレクトリを移動して実行というのを 行いと思っています。 java.io.Fileクラスを使って情報の出力も勉強したいと思います。回答ありがとうございました!
お礼
ありがとうございます!できました! どちらでもできたのですが、cdで移動して、外部コマンド実行ができるかどうか知りたかったので、本当に良かったです。 回答していただいた皆様ほんとうにありがとうございました。
補足
PrintWriter pw = new PrintWriter(process.getOutputStream(), true); pw.println("dir > testest.txt"); このように書くことができるのも勉強になりました。 意味をよく理解したいと思います。