扫描某目录下的所有文件的MD5码并导出文件【可执行jar】
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>geostack</groupId>
<artifactId>geostack-md5</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.nihaorz.util.md5.MD5Util</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
MD5Util.java
package com.nihaorz.util.md5; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; public class MD5Util {
public static void main(String[] args) {
String[] _args = new String[]{
"D:\\.m2\\repository\\geostack\\geostack-balance-core\\2.0.0.0-SNAPSHOT",
"md5",
"D:\\Nihaorz\\Desktop\\md5.txt"
};
run(args);
} private static void run(String[] args) {
if (args == null || args.length == 0) {
System.out.println("该jar文件功能为打印或导出某单个文件或者某个目录下所有文件的的MD5码");
System.out.println("第一个参数【必填】为文件路径或文件夹路径");
System.out.println("第二个参数【必填】为排序规则,name:以文件名升序,md5:以md5码升序");
System.out.println("第三个参数【选填】为导出文件路径,配绝对地址,包含文件名,不存在时自动创建,不填时数据将只打印在控制台");
} else {
if (args.length >= 2) {
System.out.println("文件扫描中......");
System.out.println("---------------------------------------------------------------------------");
String path = args[0];
File file = new File(path);
if (file.exists()) {
String sort = args[1];
if ("name".equalsIgnoreCase(sort) || "md5".equalsIgnoreCase(sort)) {
Long time = null;
long start = System.currentTimeMillis();
Map<String, File> map = getMD5ByPath(file);
Map<String, String> map1 = new HashMap<String, String>();
StringBuilder sb = new StringBuilder();
if (map.size() > 0) {
List<String> list = new ArrayList<String>();
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String md5 = it.next();
map1.put(map.get(md5).getName(), md5);
if ("name".equalsIgnoreCase(sort)) {
list.add(map.get(md5).getName());
} else if ("md5".equalsIgnoreCase(sort)) {
list.add(md5);
}
}
String[] strings = new String[list.size()];
strings = list.toArray(strings);
Arrays.sort(strings, String.CASE_INSENSITIVE_ORDER);
if ("name".equalsIgnoreCase(sort)) {
for (String string : strings) {
sb.append(map1.get(string)).append(" -- ").append(string).append("\n");
System.out.println(map1.get(string) + " -- " + string);
}
} else if ("md5".equalsIgnoreCase(sort)) {
for (String string : strings) {
sb.append(string).append(" -- ").append(map.get(string).getName()).append("\n");
System.out.println(string + " -- " + map.get(string).getName());
}
}
System.out.println("---------------------------------------------------------------------------");
System.out.println("扫描路径:" + args[0]);
System.out.println("扫描文件总数:" + map.size());
time = System.currentTimeMillis() - start;
}
if (time != null) {
System.out.println("扫描耗时:" + time + "毫秒");
} else {
long end = System.currentTimeMillis();
System.out.println("扫描耗时:" + (end - start) + "毫秒");
}
if (args.length >= 3) {
String outPath = args[2];
File outFile = new File(outPath);
if (!outFile.exists()) {
try {
outFile.createNewFile();
} catch (IOException e) {
System.out.println("文件创建失败,请检查导出路径配置!");
}
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
PrintWriter pw = new PrintWriter(fos);
StringBuilder result = new StringBuilder();
result.append("扫描路径:").append(args[0]).append("\n")
.append("扫描文件总数:").append(map.size()).append("\n")
.append("扫描耗时:").append(time).append("毫秒").append("\n")
.append("导出文件:").append(args[2]).append("\n")
.append("---------------------------------------------------------------------------\n")
.append(sb);
pw.write(result.toString().toCharArray());
pw.flush();
pw.close();
System.out.println("导出文件:"+args[2]);
}
} else {
System.out.println("排序规则不合法!");
}
} else {
System.out.println("文件路径或文件夹路径不存在!");
}
}
}
} /**
* 获取某指定文件或某目录下的文件的MD5码map
*
* @param path
* @return
*/
private static Map<String, File> getMD5ByPath(File path) {
Map<String, File> result = new HashMap<String, File>();
if (path.exists()) {
if (path.isDirectory()) {
File[] files = path.listFiles();
for (File file : files) {
try {
if (!file.isDirectory()) {
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(new FileInputStream(file)));
result.put(md5, file);
}
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
try {
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(new FileInputStream(path)));
result.put(md5, path);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
} }
进到项目根目录下执行
mvn clean compile assembly:single
然后到target目录找到以-jar-with-dependencies.jar结尾的jar文件,即可以使用java -jar命令执行
以下为附件,解压可用:
geostack-md5-1.0-SNAPSHOT-jar-with-dependencies.jar.zip
扫描某目录下的所有文件的MD5码并导出文件【可执行jar】的更多相关文章
- 在ubuntu下如何验证文件的MD5码 (转载)
转自:http://blog.csdn.net/david_xtd/article/details/7641682 在windows下可以使用专用的工具软件如WinMD5等来查看文件的MD5码, 在u ...
- Python:扫描目录下的所有文件
扫描目录下的所有文件并返回文件的绝对路径 def fileListFunc(filePathList): fileList = [] for filePath in filePathList: for ...
- [boost][filesystem] 扫描给定目录下所有项
Intro. Boost的filesystem可以用来扫描给定目录下的所有项. 实现 具体实现代码如下: 需要包含的头文件和使用的命名空间: #include <boost/filesystem ...
- php获取指定目录下的所有文件列表
在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ...
- [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [No00006B]方便的网络下载工具wget 可下载网站目录下的所有文件(可下载整个网站)
wget是linux下命令行的下载工具,功能很强大,它能完成某些下载软件所不能做的,比如如果你想下载一个网页目录下的所有文件,如何做呢?网络用户有时候会遇到需要下载一批文件的情况,有时甚至需要把整个网 ...
- linux复制指定目录下的全部文件到另一个目录中
linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...
- python实现查看目录下重复的文件
该python 脚本有以下三个功能: 1. 实现查看目录下重复的文件,输出文件按修改时间升序排列 2. 将按修改时间排列比较旧的.可删除的文件列出来 3. 按目录对重复文件进行统计,比如,目录/tmp ...
- [转载] linux查找目录下的所有文件中是否含有某个字符串
链接自 http://blog.sina.com.cn/s/blog_691a84f301015khx.html,并略加修订. 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...
随机推荐
- xxtea---单片机数据加密算法
转:https://www.cnblogs.com/LittleTiger/p/4384741.html 各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加 ...
- java多线程 - 处理并行任务
在多线程编程过程中,遇到这样的情况,主线程需要等待多个子线程的处理结果,才能继续运行下去.个人给这样的子线程任务取了个名字叫并行任务.对于这种任务,每次去编写代码加锁控制时序,觉得太麻烦,正好朋友提到 ...
- ASP.Net Core 运行错误 Http Error 502.5 解决办法
Http Error 502.5 - Process Failure 如果你看到上面这张图片了的话,说明你在本地运行的时候报错了. 尤其好多都是我的群友,说下情况. 这个一般是本地的.NET Core ...
- 微软Azure AspNetCore微服务实战第1期【补充2017-09-09活动】
2017年09月09日,冒着酷暑,我们在(上海徐汇)虹桥路3号港汇中心2座10层组织了一次微软Azure AspNetCore微服务实战活动. 由于前期工作繁忙,活动完成之后,没能及时发布相关信息,特 ...
- SQL 显示表名显示列名
显示表名:show 表名: 显示列(Field)名:show columns from 表名:
- 小谈UAT(验收测试)
验收测试人员的测试任务: 1.验收人员是提出需求的人员,所以对需求最为熟悉,最主要测试功能的遗漏或者多余2.系统测试人员重点在测试功能的正确性和非功能的符合性,当然也希望验收人员测试功能的正确性3.因 ...
- An error occurred while updating the entries. See the inner exception for details.
EF插入或更新数据时出现错误提示:An error occurred while updating the entries. See the inner exception for details.的 ...
- javaScript 删除本地cookie删不了
一.js删除本地cookie无法删除 今天发现自己真的蠢爆了! 以下为cookie定义: 1.设置Cookie的key 2.设置Cookie的key-value值 3.过期时间-自定义(一般在 ...
- os.path 下的各方法
一.os.path os.path.abspath(file) #拿到当前程序(文件)的绝对目录. os.path.split(pathname) # 返回一个元组,第零个元素为文件上级绝对目录,第一 ...
- spring实例入门
首先是bean文件: package onlyfun.caterpillar; public class HelloBean { private String helloWord = " ...