はじめまして。
JavaのgetRuntime().execでコマンドプロンプトを動かそうと思っております。
コマンドプロンプトで「netstat -an | find "***"」というコマンドをJavaから実行したいと思っています。
しかし、Javaではパイプ(=|)を利用したコマンドは実行できない。
ということを検索してたどり着きました。
例などでは、「シェル」を利用しろ。などとかかれていましたが何をどうすればいいかわかりません。
String[] s = {"netstat","-an"};
Process process = Runtime.getRuntime().exec(s);
今は上記の状態で「netstat -an」が実行されています。
どうすれば「find "***"」で***の検索をかけることができるでしょうか?
どうぞ、よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
String[] s = {"cmd.exe", "/c", "dir c: | find /i "***"};
Process process = Runtime.getRuntime().exec(s);
InputStream is = process.getInputStream();
こんな感じで使っていますが、だめですか?
お返事ありがとうございます。
String[] s = {"cmd.exe", "/c", "netstat -an | find "\"***\""};
に変更したら無事に実行し、結果を得ることができました。
ありがとうございます。
ところで、重ね重ねの質問になってしまうのですが、上で使用されている「cmd.exe」と「/c」これらの意味(前者はcmdの起動だと思いますが。)と必要な理由を教えていただけないでしょうか?
No.5
- 回答日時:
ほとんど問題は解決しているようですが,'cmd.exe /c'が「必要な理由」についてだけ...
端的に言うと,パイプ('|')やリダイレクト('<'や'>')を解釈して,実行前に,プログラム同士をつなげたり,出力をファイルにまわしたりする準備をしているのが,cmd.exe だからです.
Java から,Runtime.getRuntime().exec(...)で実行した場合,cmd.exeを経由せず,直接実行ファイルを実行しますのでパイプ等は解釈されないことになります.
というわけで,明示的にcmd.exeを経由して動かしてやれば,パイプが解釈されるというわけです.
ちなみに,cmd.exe のような仕事をするプログラムのことを「シェル」と呼びます.
お返事ありがとうございます。
なるほど。
普通に「netstat -an」のようなコマンドを入力するだけで起動やら準備までやってくれるものだと思っていました。
大変参考になりました。ありがとうございます。
No.4
- 回答日時:
ANo.3です。
cmd.exeはコマンドプロンプの起動です。/cはコマンドプロンプトのオプションで付けるとコマンドを実行後コマンドプロンプトが終了します。
コマンドプロンプトで「cmd /?」を打ち込むといろいろオプションが確認できますので興味があれば見てみてください。
たびたびありがとうございます。
なるほど、cmdに関する知識が全然足りなかったみたいですね。
次からはご迷惑をおかけしないようにきちんと調べてから質問しますね。
本当にありがとうございました。
No.2
- 回答日時:
たぶん無理だと思いますが、(試してもいません。
)netstatのProcessオブジェクトからgetOutputStreamメソッドで出力ストリームを取得し、出力ストリームから取得した結果を
findのProcessオブジェクトからgetInputStreamメソッドで取得した入力ストリームへ入れる…
というのはどうでしょうか…
おそらくダメだから、
>Javaではパイプ(=|)を利用したコマンドは実行できない。
>ということを検索してたどり着きました。
となっているのでしょうけど…
たびたびありがとうございます。
上記の方法を試すプラグラミング能力がないわけですが・・・
import java.io.*;
public class Gaibu {
public static void main(String[] args) {
try {
String[] s1 = {"netstat","-an"};
Process process = Runtime.getRuntime().exec(s1);
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
これを実行した結果(→netstat -anでport表示)をどこかに格納してその結果の中へfindコマンドを実行できる。ということでしょうか?
>おそらくダメだから、
>>Javaではパイプ(=|)を利用したコマンドは実行できない。
>>ということを検索してたどり着きました。
>となっているのでしょうけど…
というのは、「netstat -an | find "***"」のように二つのコマンドをパイプを利用して、一回で利用することができない。
ということなので、「netstat -an」の結果をどこかに保持し、それに対して「find "***"」(*は検索したいポート番号)のコマンドを実行することができるのならば、可能だと思います。
この際結果の保持を形として現れない一時記憶が理想なので・・・
結果をファイルとして出力→それに対して「find」コマンドというのは避けたいかな。とか・・思ってます。
親切に返信心から感謝いたしております。
No.1
- 回答日時:
コマンドプロンプトなので、Windowsのことで良いのかな?
Windowsなら
netstat -an | find "***"
とファイルに書いて、拡張子を「bat」にしてファイルに保存し、
javaからは上記batファイルを実行すれば良いと思います。
実行結果は、java.lang.ProcessクラスのgetOutputStreamメソッド、getErrorStreamメソッドで取るか、ファイルI/Oかな。
お返事ありがとうございます。
batファイルで実際にできるかどうかを確認してみます。
できることなら、batファイルではなくJavaのプログラム内での実行をしたいのですが、それは無理なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- UNIX・Linux ブレース展開の使い方での質問です 2 2023/07/15 16:06
- Java mac mini 2009 でのmac OS における Java の入れ替えについて 1 2022/12/27 19:23
- Java javaでパソコンの内臓カメラや内臓マイクの映像や音をリアルタイムで映し出した 1 2022/07/09 14:02
- オープンソース コマンドプロンプトのコードの実行方法を教えて欲しい 2 2022/11/26 20:45
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- Java JavaでWebページ作成 7 2023/07/21 21:09
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java VM のヒープサイズについて
-
コンパイルできるのに実行できない
-
MacOS:ターミナルではNPMのコ...
-
Windows10でSwiftが実行出来ません
-
ShellExecuteの使い方について
-
Javaプログラムでコマンド実行...
-
VB6.0 ラベルが文字化け
-
マイクラjavaでForgeを入れたい...
-
html上で、バッチやexeファイル...
-
Eclipseで、プロジェクト名のと...
-
vs codeはオフラインでも使用で...
-
eclipseのjavaを実行できない
-
Eclipseのアンインストールの仕方
-
is this even a thing?
-
OptiFineをJAVAで開こうとする...
-
NET Framework 4 v4.0.30319 ダ...
-
『ClassNotFoundException: org...
-
Tera Term ネットワークに到達...
-
JSPのクラスをコンパイルできな...
-
JSPのエラーメッセージを見る方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでタイトルバーを非表示...
-
VBプログラムから「管理者とし...
-
ShellExecuteの使い方について
-
MacOS:ターミナルではNPMのコ...
-
CloudSticky.jarが起動しない。
-
batよりjava起動
-
jarファイルをバッチで実行させ...
-
32bitアプリから64bitアプリの...
-
windows power shell icacl
-
Java VM のヒープサイズについて
-
staticのメモリ共有について
-
eclipseからのターミナル実行方...
-
ACCESS VBA からエクセルを最小化
-
SYSTEM関数等を用いて複数のコ...
-
VB6.0 ラベルが文字化け
-
「SimpleEntry を型に解決でき...
-
javaからバッチファイル実行
-
C#からバッチファイルを起動で
-
JAVAでログ出力するには?
-
コマンドを実行してコマンドラ...
おすすめ情報