Java从Runtime获取特定的行?

时间:2016-08-26 13:44:59

标签: java string runtime inputstream

我正在尝试用Java创建一个程序,它收集有关正在执行的计算机的一些信息。我通过使用以下内容获取信息:

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

在exec(“ipconfig”)命令中,它返回了我特别要求的更多信息。例如,我需要IP地址。在命令中,它被标记为“IPv4”(或类似的东西)。我使用了BufferedReader来获取Process的InputStream,并将InputStream转换为String,并获得了indexOf(“IPv4”)。不幸的是,这是我能得到的。我需要将它转换回一个String,它只包含标有“IPv4”的行。

我在这里找到了其他问题,这与此非常相似,但我似乎无法理解它们。有人可以详细解释如何做到这一点吗?

更新:我需要从Runtime方法执行此操作。我知道我可以使用InetAddress方法,但这只是它的一个例子。我将从运行时获取其他信息,我需要知道如何

1 个答案:

答案 0 :(得分:2)

查看此Java pattern matching tutorial,以便基本了解PatternMatcher类的工作原理。在那之后,您应该足够了解以下示例:

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);