java批量解析微信dat文件
本文實(shí)例為大家分享了java批量解析微信dat文件的具體代碼,供大家參考,具體內(nèi)容如下
微信圖片默認(rèn)路徑:C:\Users\b-eet\Documents\WeChat Files\b-eethoven\FileStorage\Image
微信文件利用Xor加密,計(jì)算之前需要知道異或值是多少。(好像每個(gè)人電腦上面的異或值都不同,在24行更改異或值)
異或值可用電腦自帶的計(jì)算機(jī)計(jì)算(Xor)

package cn.kgw;
import java.io.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class WeChatImgRevert {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(10);
Runnable r = () -> {
String[] fileName = GetFileName.getFileName("D:/dat");
int i = 0;
for (String name : fileName) {
try (InputStream reader = new FileInputStream("D:/dat/" + name)) {
try (OutputStream writer = new FileOutputStream("D:/photo/" + name + ".jpg")) {
byte[] bytes = new byte[1024];
int b;
while ((b = reader.read(bytes)) != -1) {//這里的in.read(bytes);就是把輸入流中的東西,寫(xiě)入到內(nèi)存中(buffer)。
// System.out.println("b = " + b + " b ^ 241 = " + (b ^ 241));
writer.write(b ^ 241);//241這個(gè)值是現(xiàn)算的,每個(gè)人電腦的值都不一致
writer.flush();
}
}
System.out.println(i++);
} catch (Exception e) {
e.printStackTrace();
}
}
};
pool.submit(r);
pool.shutdown();
// System.out.println("--------------------------------");
//
// ArrayList<String> listFileName = new ArrayList<String>();
//
// GetFileName.getAllFileName("F:/dat", listFileName);
//
// for (String name : listFileName) {
// System.out.println(name);
// }
}
}
class GetFileName {
public static String[] getFileName(String path) {
File file = new File(path);
String[] fileName = file.list();
return fileName;
}
// public static void getAllFileName(String path, ArrayList<String> fileName) {
//
// File file = new File(path);
//
// File[] files = file.listFiles();
//
// String[] names = file.list();
//
// if (names != null)
//
// fileName.addAll(Arrays.asList(names));
//
// for (File a : files) {
//
// if (a.isDirectory()) {
//
// getAllFileName(a.getAbsolutePath(), fileName);
//
// }
// }
// }
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索功能
我們都知道隨著業(yè)務(wù)系統(tǒng)的發(fā)展和使用,數(shù)據(jù)庫(kù)存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)量會(huì)越來(lái)越大,逐漸成為了業(yè)務(wù)系統(tǒng)的瓶頸,本文給大家介紹了Spring Boot業(yè)務(wù)系統(tǒng)如何實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10
spring cloud gateway轉(zhuǎn)發(fā)服務(wù)報(bào)錯(cuò)的解決
這篇文章主要介紹了spring cloud gateway轉(zhuǎn)發(fā)服務(wù)報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java 對(duì)象序列化 NIO NIO2詳細(xì)介紹及解析
這篇文章主要介紹了Java 對(duì)象序列化 NIO NIO2詳細(xì)介紹及解析的相關(guān)資料,序列化機(jī)制可以使對(duì)象可以脫離程序的運(yùn)行而對(duì)立存在,需要的朋友可以參考下2017-02-02
Eclipse新建項(xiàng)目不可選擇Java Project問(wèn)題解決方案
這篇文章主要介紹了Eclipse新建項(xiàng)目不可選擇Java Project問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Java 定時(shí)器(Timer)及線程池里使用定時(shí)器實(shí)例代碼
這篇文章主要介紹了Java 定時(shí)器(Timer)及線程池里使用定時(shí)器實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-12-12
java自定義動(dòng)態(tài)鏈接數(shù)據(jù)庫(kù)示例
這篇文章主要介紹了java自定義動(dòng)態(tài)鏈接數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下2014-02-02
Java map.getOrDefault()方法的用法詳解
這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12

