Java获取本机连接过的所有WiFI密码并且以TXT文本输出文件
Posted 花伤情犹在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java获取本机连接过的所有WiFI密码并且以TXT文本输出文件相关的知识,希望对你有一定的参考价值。
前言
本文将介绍如何使用Java来获取Windows下所有连接过的WIFI密码,并且将WIFI信息以TXT文本的形式来输出文件。
运行效果:
- WIFI信息会在控制台打印出来
- 自动打开生成WIFI信息的TXT文本
原理:
本教程原理就是用Java调用cmd命令获取WIFI信息,然后使用BufferedReader来读取内容。
使用readLine()进行读取字符串(注意:readLine()是一次读取一行的数据
),所以需要使用循环实现读取多行数据。
主要用到2条命令:
netsh wlan show profiles
显示所有WIFI名称
netsh wlan show profiles name"wifi名称" key=clear
显示指定WiFi的信息
在 String 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。
- substring(int beginIndex) 形式
String str = "我爱 Java 编程";
String result = str.substring(3);
System.out.println(result); // 输出:Java 编程
- substring(int beginIndex,int endIndex) 形式
public static void main(String[] args) {
String day = "Today is Monday"; //原始字符串
System.out.println("substring(0)结果:"+day.substring(0));//结果:Today is Monday
System.out.println("substring(2)结果:"+day.substring(2));//结果:day is Monday
System.out.println("substring(10)结果:"+day.substring(10));//结果:onday
System.out.println("substring(2,10)结果:"+day.substring(2,10));//day is M
System.out.println("substring(0,5)结果:"+day.substring(0,5));//Today
}
1.首先将cmd命令执行的结果使用Java提取字符串(substring
)比如WIFI名称
提取字符串(WIFI名称)
name.substring(15,name.length())
判断是否含有WIFI名称,如果>=0则代表有(true),否则就没有(false)
name.indexOf(" 所有用户配置文件 : ")>=0
比如我只想获取WIFI名称
花伤情犹在
,就要从含有所有用户配置文件
这一行的字符串第15位开始提取到最后一位,这样就截取到WIFI名称
2.下一步拿到WiFi名称之后就可以获取WIFI信息,通过netsh wlan show profiles name"wifi名称" key=clear
可以获取到密码,还是通过使用Java提取字符串(substring
)比如WIFI密码
提取字符串(WIFI密码)
password.substring(22,password.length())
判断是否含有WIFI密码 ,如果>=0则代表有(true),否则就没有(false)
password.indexOf("关键内容")>=0
比如我只想获取WIFI名称为
花伤情犹在
的WIFi密码
,就要从含有关键内容
的这一行的字符串第22位开始提取到最后一位,这样就截取到WIFI名称
3.然后利用Java的输出流把这些信息输出到当前路径下的WIFI.txt文件里面
写入WIFI名称
fileWriter.write("WIFI名称:"+name.substring(15,name.length())+"\\n");
写入WIFI密码
fileWriter.write("WIFI密码:"+password.substring(22,password.length())+"\\n"+"***************************"+"\\n");
最后用Java调用cmd打开当前路径下的WIFI.txt文件
4.最后用Java调用cmd命令调用notepad也就是文本文档打开当前路径的WIFI.txt文件
Runtime.getRuntime().exec("cmd.exe /c notepad "+System.getProperty("user.dir")+"\\\\WIFI.txt");
代码:
package 显示密码;
import java.io.*;
public class GetWiFiPassWord {
public static void main(String[] args) throws IOException {
testRunntime();
}
public static void testRunntime(){
try {
FileWriter fileWriter=new FileWriter("WIFI.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("netsh wlan show profiles").getInputStream(),"GBK"));
String name;//储存WIFI名称的一行数据
//遍历WIFI
while ((name=br.readLine())!=null){
if (name.indexOf(" 所有用户配置文件 : ")>=0){
//打印wifi名称
System.out.println("WIFI名称:"+name.substring(15,name.length()));//提取WiFi名称的字符串然后输出
fileWriter.write("WIFI名称:"+name.substring(15,name.length())+"\\n");
//如果不写GBK会出现乱码
BufferedReader br2 = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("netsh wlan show profiles name=\\""+name.substring(15,name.length())+"\\" key=clear").getInputStream(),"GBK"));
String password;//储存WIFi密码的一行数据
//遍历字符串->"关键内容"
while ((password=br2.readLine())!=null){
if (password.indexOf("关键内容")>=0){
//打印WIFI密码
System.out.println("WIFI密码:"+password.substring(22,password.length()));//提取WIFI密码的字符串然后输出
fileWriter.write("WIFI密码:"+password.substring(22,password.length())+"\\n"+"***************************"+"\\n");
System.out.println("***************************");
break;
}
}
}
}
br.close();//关闭字符缓冲read流
fileWriter.close();//关闭文件write流
System.out.println("WIFI信息已经自动保存在WIFI.txt");
//用文本文档(notepad)打开WIFI.txt
Runtime.getRuntime().exec("cmd.exe /c notepad "+System.getProperty("user.dir")+"\\\\WIFI.txt");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上是关于Java获取本机连接过的所有WiFI密码并且以TXT文本输出文件的主要内容,如果未能解决你的问题,请参考以下文章