扫描某目录下的所有文件的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 ...
随机推荐
- JS 有趣的JS
一. var arr = []; for (var i = 0; i < 3; i++) { arr[i] = function() { console.log(i+'__') // 3 3 3 ...
- AndroidManifest.xml文件解析
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- Elasticsearch 5.0Head插件
Elasticsearch 5.0 —— Head插件部署指南 使用ES的基本都会使用过head,但是版本升级到5.0后,head插件就不好使了.下面就看看如何在5.0中启动Head插件吧! 官方 ...
- VO和DO转换(三) Dozer
VO和DO转换(一) 工具汇总 VO和DO转换(二) BeanUtils VO和DO转换(三) Dozer VO和DO转换(四) MapStruct 可参考的资料: dozer官网 Dozer(Jav ...
- PHP中多个文件包含的问题 (二)
首先php中有常用的两种方法将文件包含:include和require,而include_once和require_once无非就是升级版而已,这里就不阐述他们的区别,我只提一下我遇到的问题: 先看一 ...
- shell脚本--eval执行shell命令
和其他语言的eval功能差不多,都是将一个保存执行语句的变量作为参数,eval会让变量所保存的语句执行. 下面是一个执行表单提交的命令:注意,这里只是示例,应用中不要这么使用,很危险 #!/bin/b ...
- java kill thread command line
multithreading - How do you kill a Thread in Java? - Stack Overflowhttps://stackoverflow.com/questio ...
- LLVM的安装
1. 官网下载 llvm 2. 官网下载cmake 3. configure 执行 llvm 发现报错 4. 解压缩 cmake 5.将cmake 下面的bin 目录放到环境变量里面去 6. 创建一个 ...
- Jquery ajax传递xml方式在ie8下兼容问题
主要问题就是ie8把xml格式在打开的时候转换成了string,我们只用把其转换回xml就可以了. $.ajax({ type:’GET’, url:’list.php?pagenow=’+count ...
- Java——scoket通讯
Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket是TCP/IP协议通信的抽象层,所以我们还需要了解TCP协议 传输层协议 TCP: ...