Java 打印WiFi SSID和x27的列表;s

Java 打印WiFi SSID和x27的列表;s,java,wifi,ssid,Java,Wifi,Ssid,我正在用Java编写一个程序,它需要在控制台中打印出可用WiFi名称的列表,即SSID,并用分号分隔 比如:wifi1;斯威菲国王;otherwifi查询系统上的wifi数据是特定于操作系统的,因此没有通用的库来执行此操作 尽管如此,我还是编写了一个类,它使用windows命令行实用程序netsh检索SSID并以JSON字符串形式返回它们。其他操作系统上也有类似的实用程序,您可以使用它们来实现相同的效果。希望这门课能让你开始学习 import java.io.IOException; impor

我正在用Java编写一个程序,它需要在控制台中打印出可用WiFi名称的列表,即SSID,并用分号分隔


比如:wifi1;斯威菲国王;otherwifi

查询系统上的wifi数据是特定于操作系统的,因此没有通用的库来执行此操作

尽管如此,我还是编写了一个类,它使用windows命令行实用程序netsh检索SSID并以JSON字符串形式返回它们。其他操作系统上也有类似的实用程序,您可以使用它们来实现相同的效果。希望这门课能让你开始学习

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WindowsNetworkHelper
{

    public String getSsidsJson(String regex) throws Exception
    {
        Runtime rt = Runtime.getRuntime();
        try
        {
            Process pr = rt.exec("netsh wlan show networks mode=bssid");

            String processOutput = processOutputToString(pr);
            ArrayList<String> ssidList = extractSsids(processOutput,regex);
            String result = "[";
            boolean addComma = false;
            for(String ssid : ssidList)
            {
                if(addComma)
                {
                    result += ",";
                }
                result += "{\"ssid\":\"" + ssid + "\"}";
                addComma = true;
            }
            result += "]";
            return result;
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "[]";
    }

    private ArrayList<String> extractSsids(String result,String regex)
    {
        ArrayList<String> ssids = new ArrayList<String>();
        String[] lines = result.split("\r\n\r\n");
        Pattern ssidPattern = Pattern.compile("^SSID [0-9]+ : (.+)");

        for(String line : lines)
        {
            Matcher ssidMatcher = ssidPattern.matcher(line);
            if(ssidMatcher.find())
            {
                String capture = ssidMatcher.group(1);

                if(ssidMatchesFilter(capture,regex))
                {
                    ssids.add(capture);
                }
            }
        }

        return ssids;
    }

    private boolean ssidMatchesFilter(String ssid,String regex)
    {
        if(regex == null)
        {
            return true;
        }
        Pattern filterPattern = Pattern.compile(regex);
        Matcher filterMatcher = filterPattern.matcher(ssid);
        return filterMatcher.matches();
    }

    private String processOutputToString(Process pr)
    {
        InputStream is = pr.getInputStream();
        java.util.Scanner s = new java.util.Scanner(is);
        s.useDelimiter("\\A");
        String result = s.hasNext() ? s.next() : "";
        s.close();
        return result;
    }

}
import java.io.IOException;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类WindowsNetworkHelper
{
公共字符串GetSSIDSSON(字符串正则表达式)引发异常
{
Runtime rt=Runtime.getRuntime();
尝试
{
进程pr=rt.exec(“netsh wlan show networks mode=bssid”);
字符串processOutput=ProcessOutputOstring(pr);
ArrayList ssidList=ExtractSSID(processOutput,regex);
字符串结果=“[”;
布尔addComma=false;
用于(字符串ssid:ssidList)
{
if(addComma)
{
结果+=“,”;
}
结果+=“{\“ssid\”:\”+ssid+“\”}”;
addComma=true;
}
结果+=“]”;
返回结果;
}捕获(IOE异常)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回“[]”;
}
私有ArrayList extractSSID(字符串结果、字符串正则表达式)
{
ArrayList ssids=新的ArrayList();
String[]line=result.split(“\r\n\r\n”);
Pattern ssidPattern=Pattern.compile(“^SSID[0-9]+:(.+)”;
用于(字符串行:行)
{
匹配器ssidMatcher=ssidPattern.Matcher(行);
if(ssidMatcher.find())
{
字符串捕获=ssidMatcher.group(1);
if(ssidMatchesFilter(捕获,正则表达式))
{
添加(捕获);
}
}
}
返回SSID;
}
私有布尔ssidMatchesFilter(字符串ssid、字符串正则表达式)
{
if(regex==null)
{
返回true;
}
patternfilterpattern=Pattern.compile(regex);
Matcher filterMatcher=filterPattern.Matcher(ssid);
返回filterMatcher.matches();
}
私有字符串ProcessOutputOstring(进程pr)
{
InputStream is=pr.getInputStream();
java.util.Scanner s=新的java.util.Scanner(is);
s、 使用分隔符(\\A”);
字符串结果=s.hasNext()?s.next():“”;
s、 close();
返回结果;
}
}

@LawrenceAiello你知道,与其做一个混蛋,你实际上可以发挥一些作用。@WizGamin,我支持你-那不合适。然而,你的问题不是很清楚。您能用您编写的代码示例更新它吗?并解释其中哪部分不适合您?@SimonMᶜ肯齐,这就是我被困的地方…基本上,它需要搜索wifi的附近,然后说出这些wifi的名字,你基本上希望我们为你写代码。现在你明白我为什么这么说了。我担心这对于堆栈溢出来说太宽泛了。您需要表明您已经做出了努力,然后您可以询问有关您遇到的特定编码问题的问题。正如@LawrenceAiello所说,没有人会为您编写代码,但他们会帮助您修复您已经编写的代码!