我正在用Java创建一个程序,它需要打印出一个可用的WiFi名称列表SSID,它们全部用分号分隔。
所以喜欢:wifi1; thekingswifi; otherwifi
答案 0 :(得分:0)
查询系统上的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;
}
}