//保存路径(输出)

String savePath=“C:\Users\Administrator\Desktop”;

//开始解析

convert(wxPath, savePath);

/**

  • @param path 图片目录地址

  • @param targetPath 转换后目录

*/

private void convert(String path, String targetPath) {

File[] file = new File(path).listFiles();

if (file == null) {

return;

}

int size = file.length;

txtArea_log.append(“总共” + size + “个文件\r\n”);

AtomicReference integer = new AtomicReference<>(0);

AtomicInteger x

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

= new AtomicInteger();

for (File file1 : file) {

if (file1.isFile()) {

Object[] xori = getXor(file1);

if (xori != null && xori[1] != null){

x.set((int)xori[1]);

}

break;

}

}

Arrays.stream(file).parallel().forEach(file1 -> {

if (file1.isDirectory()) {

String[] newTargetPath = file1.getPath().split("/|\\");

File targetFile = new File(targetPath+File.separator+newTargetPath[newTargetPath.length - 1]);

if (!targetFile.exists()) {

targetFile.mkdirs();

}

convert(file1.getPath(),targetPath+File.separator+newTargetPath[newTargetPath.length - 1]);

return;

}

Object[] xor = getXor(file1);

if (x.get() == 0 && xor[1] != null && (int) xor[1] != 0) {

x.set((int) xor[1]);

}

xor[1] = xor[1] == null ? x.get() : xor[1];

try (InputStream reader = new FileInputStream(file1);

OutputStream writer =

new FileOutputStream(targetPath + File.separator + file1.getName().split("\.")[0] + (xor[0] != null ?

“.” + xor[0] : “”))) {

byte[] bytes = new byte[1024 * 10];

int b;

while ((b = reader.read(bytes)) != -1) {//这里的in.read(bytes);就是把输入流中的东西,写入到内存中(bytes)。

for (int i = 0; i < bytes.length; i++) {

bytes[i] = (byte) (int) (bytes[i] ^ (int) xor[1]);

if (i == (b - 1)) {

break;

}

}

writer.write(bytes, 0, b);

writer.flush();

}

integer.set(integer.get() + 1);

txtArea_log.append(file1.getName() + “(大小:” + ((double) file1.length() / 1000) + “kb,异或值:” + xor[1] + “),” +“进度:” + integer.get() + “/” + size+"\r\n");

} catch (Exception e) {

e.printStackTrace();

}

});

txtArea_log.append(“解析完毕!\r\n”);

}

/**

  • 判断图片异或值

  • @param file

  • @return

*/

private static Object[] getXor(File file) {

Object[] xor = null;

if (file != null) {

byte[] bytes = new byte[4];

try (InputStream reader = new FileInputStream(file)) {

reader.read(bytes, 0, bytes.length);

} catch (Exception e) {

e.printStackTrace();

}

xor = getXor(bytes);

}

return xor;

}

/**

  • @param bytes

  • @return

*/

private static Object[] getXor(byte[] bytes) {

Object[] xorType = new Object[2];

int[] xors = new int[3];

for (Map.Entry<String, String> type : FILE_TYPE_MAP.entrySet()) {

String[] hex = {

String.valueOf(type.getKey().charAt(0)) + type.getKey().charAt(1),

String.valueOf(type.getKey().charAt(2)) + type.getKey().charAt(3),

String.valueOf(type.getKey().charAt(4)) + type.getKey().charAt(5)

};

xors[0] = bytes[0] & 0xFF ^ Integer.parseInt(hex[0], 16);

xors[1] = bytes[1] & 0xFF ^ Integer.parseInt(hex[1], 16);

xors[2] = bytes[2] & 0xFF ^ Integer.parseInt(hex[2], 16);

if (xors[0] == xors[1] && xors[1] == xors[2]) {

xorType[0] = type.getValue();

xorType[1] = xors[0];

break;

}

}

return xorType;

}

private final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();

private JButton btn_open_wxpath;

private final JButton btn_open_savepath = new JButton("");

static {

getAllFileType();

}

private static void getAllFileType() {

FILE_TYPE_MAP.put(“ffd8ffe000104a464946”, “jpg”); //JPEG (jpg)

FILE_TYPE_MAP.put(“89504e470d0a1a0a0000”, “png”); //PNG (png)

FILE_TYPE_MAP.put(“47494638396126026f01”, “gif”); //GIF (gif)

FILE_TYPE_MAP.put(“49492a00227105008037”, “tif”); //TIFF (tif)

FILE_TYPE_MAP.put(“424d228c010000000000”, “bmp”); //16色位图(bmp)

FILE_TYPE_MAP.put(“424d8240090000000000”, “bmp”); //24位位图(bmp)

FILE_TYPE_MAP.put(“424d8e1b030000000000”, “bmp”); //256色位图(bmp)

FILE_TYPE_MAP.put(“41433130313500000000”, “dwg”); //CAD (dwg)

FILE_TYPE_MAP.put(“3c21444f435459504520”, “html”); //HTML (html)

FILE_TYPE_MAP.put(“3c21646f637479706520”, “htm”); //HTM (htm)

FILE_TYPE_MAP.put(“48544d4c207b0d0a0942”, “css”); //css

FILE_TYPE_MAP.put(“696b2e71623d696b2e71”, “js”); //js

FILE_TYPE_MAP.put(“7b5c727466315c616e73”, “rtf”); //Rich Text Format (rtf)

FILE_TYPE_MAP.put(“38425053000100000000”, “psd”); //Photoshop (psd)

FILE_TYPE_MAP.put(“46726f6d3a203d3f6762”, “eml”); //Email [Outlook Express 6] (eml)

Java开发微信dat文件解析工具,android原生开发笔记应用相关推荐

  1. Java开发微信dat文件解析工具

    功能说明: 这个软件可以将电脑端微信的dat加密文件转换为png.jpg等图片资源,方便直接查看微信聊天记录里相关的文件,特别说明:本工具只能查看文件,不能查看聊天记录的文字内容! 软件截图: 关键代 ...

  2. AndroidStudio_安卓原生开发_什么是AndroidStudio NDK ---Android原生开发工作笔记140

    今天在androidstudio的配置页面,看到了一个NDK Version 都没用过这个NDK,这个NDK是什么呢?来了解一下吧. 1.NDK是一系列工具的集合. NDK提供了一系列的工具,帮助开发 ...

  3. 微信DAT文件解码 免费 无限制 微信dat文件取证工具

    先贴图吧 本人最近有个微信取证的需求,网上找不到好用的工具,不是收费就是需要手动计算key值,还有只支持一种图片格式的,总之普遍用起来很难受. 一不做二不休,自己用C#写了一个,使用.NET FRAM ...

  4. AndroidStudio_安卓原生开发_v4v7升级到androidx方法---Android原生开发工作笔记147

    自己的程序版本太久了,导致要集成进一些网路上找的自定义控件等都集成不进来...就升级了: 1.首先在项目的: TestApp\gradle.properties 文件中: 添加 # 表示使用 andr ...

  5. android dat 乱码,微信dat文件打开乱码

    微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...

  6. java xml文件解析工具_Xml文件解析工具 - java

    解析Xml文件:就是把Xml文件里面的内容取出来. Xml文件解析工具:一个能解析Xml文件的类,即一个能把Xml文件里面的内容取出来的类. 先给出一个Xml文件(student_infor.xml) ...

  7. 微信 dat 文件还原

    前言 以微信 PC 端为例 某个小姐姐/小哥哥通过微信发给你的图片会在以下目录以 .dat 后缀的格式出现 C:\Users\taadis\Documents\WeChat Files\taadis\ ...

  8. 微信缓存dat怎么转图片_微信dat文件转换为图片

    微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...

  9. php解析bt,PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解

    PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解 发布于 2017-09-08 20:05:36 | 124 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP( ...

最新文章

  1. erlang精要(27)-异常处理
  2. JS通用窗口拖动函数
  3. Genymotion如何访问本地服务器?
  4. mysql存储过程的返回值在哪里设置_MySQL存储过程的返回值
  5. 运放的主要参数详细介绍
  6. 史上最成功的数学预测:用狄拉克方程推导出电子自旋
  7. 2020.xilinx开发环境
  8. php之$_SESSION的理解
  9. python安装包的路径
  10. 【大数据实战项目一】数据下载以及工具软件的使用
  11. matlab三维绘图函数plot3【matlab图行绘制四】
  12. mysql实验四数据库查询和视图_数据库实验四答案
  13. 微信小程序picker下拉框
  14. Google pixel 原生安卓出现 WiFi 网络受限、优化网速、网络无法连接问题
  15. ICD建模功能约束(详见DL/T860.73附录B)
  16. win10怎么还原系统【系统天地】
  17. 原生JS实现图片跑马灯特效
  18. 英语----非谓语的另类运用:独立主格
  19. 网络视频会议 OpenMeetings 介绍 运行 开发
  20. 太原市高二会考计算机试题及答案,太原市第二十一中学校2019-2020学年高二会考模拟生物试卷...

热门文章

  1. Linux下用户的创建与删除
  2. 0.NumpyPandas简介和安装
  3. 抖音主页位置怎么自己创建服务器手机版,抖音显示位置怎么设置 自己切换城市位置教程...
  4. JVM垃圾回收机制和算法
  5. PDA程序安装制作(zt)
  6. iMazing怎么提取应用程序
  7. redis配置远程连接
  8. 新年快到了,让我们一起用Python编织中国结吧
  9. 你知道大数据中的五种采集方式吗?
  10. linux格式化硬盘命令