我正在尝试用Java创建一个程序,它收集有关正在执行的计算机的一些信息。我通过使用以下内容获取信息:
Process rt = Runtime.getRuntime ().exec("ipconfig");
在exec(“ipconfig”)命令中,它返回了我特别要求的更多信息。例如,我需要IP地址。在命令中,它被标记为“IPv4”(或类似的东西)。我使用了BufferedReader来获取Process的InputStream,并将InputStream转换为String,并获得了indexOf(“IPv4”)。不幸的是,这是我能得到的。我需要将它转换回一个String,它只包含标有“IPv4”的行。
我在这里找到了其他问题,这与此非常相似,但我似乎无法理解它们。有人可以详细解释如何做到这一点吗?
更新:我需要从Runtime方法执行此操作。我知道我可以使用InetAddress方法,但这只是它的一个例子。我将从运行时获取其他信息,我需要知道如何
答案 0 :(得分:2)
查看此Java pattern matching tutorial,以便基本了解Pattern和Matcher类的工作原理。在那之后,您应该足够了解以下示例:
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 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);