我正在用Java制作一个程序,它需要将可用WiFi名称的列表(SSID)打印到控制台中,所有这些名称都用分号分隔。
就像:wifi1;thekingswifi;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;
}
}