2016-08-26 8 views
2

実行中のコンピュータに関する情報を収集するJavaでプログラムを作成しようとしています。それは私が特別に求めていることをより多くの情報を返し、EXEC(「IPCONFIG」)コマンドでJavaはRuntimeから特定の行を取得しますか?

Process rt = Runtime.getRuntime().exec("ipconfig"); 

:私はのようなものを用いて情報を取得します。たとえば、私はIPアドレスが必要です。コマンドでは、 "IPv4"(またはそれに類するもの)というラベルが付けられています。私はProcessのInputStreamを取得するためにBufferedReaderを使用し、InputStreamをStringに変換し、indexOf( "IPv4")を取得しました。残念ながら、それは私が得る限りです。私はそれを文字列に変換する必要があります。文字列には "IPv4"というラベルが付けられた行だけが含まれています。

私はここに他の質問を見つけましたが、それは本当にこれに似ていますが、私はそれらを理解できないようです。誰かが詳細にこれを具体的に行う方法を説明してもらえますか?

更新:これはランタイムメソッドから行う必要があります。私はInetAddressメソッドを使うことができることを知っていますが、これはその一例です。私は、ランタイムから、他の情報を取得することになる、と私は

+1

:次の入力パラメータを使用して、あなたの特定の問題について

public static String parseCommandOutput(String command, String regex, int group) { Pattern pattern = Pattern.compile(regex); Process process = Runtime.getRuntime().exec(command); try(InputStreamReader inputReader = new InputStreamReader(process.getInputStream()); BufferedReader buffReader = new BufferedReader(inputReader)) { String inLine = null; while((inLine = buffReader.readLine()) != null) { Matcher matcher = pattern.matcher(inLine); if(matcher.find()) { return inLine.substring(matcher.start(group), matcher.end(group)); } } return null; } } 

:その後、次の例を理解するために十分を知っている必要がありますそれが正常に動作したら、 'String.substring()'を使って、あなたが望むものを得るのはなぜですか? – Idos

+0

また、これを行う他の方法を調べることもできます。このコマンドを実行すると、私の考えるWindows上でのみ動作するようになります。どういうもの? http://stackoverflow.com/questions/8765578/get-local-ip-address-without-connecting-to-the-internet – ThePerson

+0

'grep'を使って、出力を好みのものに減らすことができます。 –

答えて

2

PatternMatcherクラスがどのように動作するかの基本的な理解を得るために、このJava pattern matching tutorialを見てみましょうどのように知っておく必要があります。あなたは `indexOf`とを使用していたポイントになった場合

String command = "ipconfig"; 
String regex = "(IPv4 Address.*:)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"; 
int group = 2; 
String ipv4 = parseCommandOutput(command, regex, group); 
関連する問題