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 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。

  1. substring(int beginIndex) 形式
String str = "我爱 Java 编程";
String result = str.substring(3);
System.out.println(result);    // 输出:Java 编程
  1. 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文本输出文件的主要内容,如果未能解决你的问题,请参考以下文章

CMD获取所有连接过的WIFI密码

cmd 一键获取 所有连接过的wifi 密码

如何获取iPhone上已连接过的WiFi密码? 无需越狱 + 需要Macbook上的钥匙串

win10以前连接过的wifi密码怎么查看

通过电脑获取WIFI密码(只能连接过的WiFi)

如何通过dos命令去查看连接过的wifi密码