• 扫描某目录下的所有文件的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("
    ");
                                        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("
    ");
                                        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("
    ")
                                        .append("扫描文件总数:").append(map.size()).append("
    ")
                                        .append("扫描耗时:").append(time).append("毫秒").append("
    ")
                                        .append("导出文件:").append(args[2]).append("
    ")
                                        .append("---------------------------------------------------------------------------
    ")
                                        .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

  • 相关阅读:
    模拟hadoop-rpc通信
    IOUtils方式上传下载文件
    HDFS基本操作的API
    HDFS基本命令行操作及上传文件的简单API
    gcj_2016_Round1_B
    hiho_1070_RMQ
    hiho_1068_RMQ_st算法
    hiho_1067_最近公共祖先2
    hiho_1062_最近公共祖先
    hiho_1066_并查集
  • 原文地址:https://www.cnblogs.com/nihaorz/p/7852641.html
Copyright © 2020-2023  润新知