java通过文件夹创建时间排序并且返回到页面

2022-06-21 00:00:00 创建 排序 文件夹

1. 实现逻辑与代码

  • 传入存放文件的父目录名称 获取该目录下的所有文件夹
 /**
     * 查找实例ID文件夹下的所有文件
     *
     * @param folder
     * @return 文件夹下所有文件夹
     */
    public static List<File> SearchFiles(File folder) {
        List<File> result = new ArrayList<>();
        if (folder.isFile())
            result.add(folder);
        File[] subFolders = folder.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                if (file.isDirectory()) {
                    return true;
                }
                return false;
            }
        });
        if (subFolders != null) {
            for (File file : subFolders) {
                if (!file.isFile()) {
                    // 如果是文件夹则将文件夹添加到结果列表中
                    result.add(file);
                } else {
                    // 如果是文件,则递归调用本方法
                    result.addAll(SearchFiles(file));
                }
            }
        }
        return result;
    }
  • 获取文件夹创建时间
/**
     * 获取文件夹创建时间,返回long类型时间戳
     *
     * @param path
     * @return
     * @throws IOException
     */
    public static long GetCreationTime(String path) throws IOException {
        BasicFileAttributes attributes = null;
        attributes = Files.readAttributes(Paths.get(path), BasicFileAttributes.class);
        return attributes.creationTime().toMillis();
    }
  • 调用以上两个方法,传入父目录绝对路径返回文件夹 Map 集合存放文件名和时间戳
 /**
     * 返回文件夹 Map 集合
     *
     * @return
     * @throws IOException
     */
    public static HashMap<String, Long> GetFolder(String path) throws IOException {
        List<File> files = SearchFiles(new File(path));
        // System.out.println("共找到:" + files.size() + "个文件夹");
        HashMap<String, Long> fileMap = new HashMap();
        for (File file : files) {
            String url = file.getAbsolutePath();
            String fileName = url.substring(url.lastIndexOf("\\") + 1);
            // System.out.println(fileName);
            fileMap.put(fileName, GetCreationTime(url));
        }

        // 迭代输出 文件夹Map
        /*Iterator iter1 = fileMap.entrySet().iterator();
        while (iter1.hasNext()) {
            Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) iter1.next();
            System.out.println("Item :" + entry.getKey() + " Count:" + entry.getValue());
        }*/

        return fileMap;
    }
  • 对HashMap的value进行排序,将每一个键值对转成”key=value”,存放在ArrayList中,再循环遍历分割字符串,转换为JSONArray输出
/**
     * 文件夹集合排序
     *
     * @param file
     * @return
     * @throws IOException
     */
    public static JSONArray FileMapSort(File file) throws IOException {
        // 返回文件夹名称和创建时间
        HashMap<String, Long> fileMap = GetFolder(file.getAbsolutePath());

        List<Map.Entry<String, Long>> infoIds = new ArrayList<Map.Entry<String, Long>>(fileMap.entrySet());
        // 对HashMap中的 value 进行排序
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Long>>() {
            public int compare(Map.Entry<String, Long> o1,
                               Map.Entry<String, Long> o2) {
                return (o1.getValue()).toString().compareTo(o2.getValue().toString());
            }
        });
        ArrayList<String> idList = new ArrayList<>();

        // 对HashMap中的 value 进行排序
        for (int i = 0; i < infoIds.size(); i++) {
            String id = infoIds.get(i).toString();
            // System.out.print(id + "  ");
            idList.add(id);
        }
        JSONArray jo = Segmentation(idList);
        return jo;
    }
  • 字符串分割的方法,因为JSON是无序的,所以需要存放一个变量ID方便前端进行取值
/**
     * 传入字符串数组进行
     * 返回分割后的JSON
     *
     * @param tmp
     * @return
     */
    public static JSONArray Segmentation(ArrayList<String> tmp) {
        JSONArray ja = new JSONArray();
        String k = null;
        String v = null;
        int x = 1;
        for (String s : tmp) {
            String[] strArr = s.split("=");
            for (int i = 0; i < strArr.length; ++i) {
                //  System.out.println(strArr[i]);
                if (i == 0) {
                    k = strArr[i];
                } else {
                    v = strArr[i];
                }
            }

            JSONObject jo = new JSONObject();
            jo.put(k, v);
            jo.put("id",x);
            ja.add(jo);
        }
        return ja;
    }

2. 后端源码

package com.demo.util;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;


/**
 * 遍历文件的工具类
 * 实现创建时间排序
 *
 * @author ccziwe
 * @date 2019-06-29 15:59
 */

public class FileUtil {
    
    /**
     * 查找实例ID文件夹下的所有文件
     *
     * @param folder
     * @return 文件夹下所有文件夹
     */
    public static List<File> SearchFiles(File folder) {
        List<File> result = new ArrayList<>();
        if (folder.isFile())
            result.add(folder);
        File[] subFolders = folder.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                if (file.isDirectory()) {
                    return true;
                }
                return false;
            }
        });
        if (subFolders != null) {
            for (File file : subFolders) {
                if (!file.isFile()) {
                    // 如果是文件夹则将文件夹添加到结果列表中
                    result.add(file);
                } else {
                    // 如果是文件,则递归调用本方法,然后把所有的文件加到结果列表中
                    result.addAll(SearchFiles(file));
                }
            }
        }
        return result;
    }

    
    /**
     * 获取文件夹创建时间
     *
     * @param path
     * @return
     * @throws IOException
     */
    public static long GetCreationTime(String path) throws IOException {
        BasicFileAttributes attributes = null;
        attributes = Files.readAttributes(Paths.get(path), BasicFileAttributes.class);
        return attributes.creationTime().toMillis();
    }

    
    /**
     * 返回文件夹 Map 集合
     *
     * @return
     * @throws IOException
     */
    public static HashMap<String, Long> GetFolder(String path) throws IOException {
        List<File> files = SearchFiles(new File(path));
        // System.out.println("共找到:" + files.size() + "个文件夹");
        HashMap<String, Long> fileMap = new HashMap();
        for (File file : files) {
            String url = file.getAbsolutePath();
            String fileName = url.substring(url.lastIndexOf("\\") + 1);
            // System.out.println(fileName);
            fileMap.put(fileName, GetCreationTime(url));
        }

        // 迭代输出 文件夹Map
        /*Iterator iter1 = fileMap.entrySet().iterator();
        while (iter1.hasNext()) {
            Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) iter1.next();
            System.out.println("Item :" + entry.getKey() + " Count:" + entry.getValue());
        }*/

        return fileMap;
    }


    /**
     * 文件夹集合排序
     *
     * @param file
     * @return
     * @throws IOException
     */
    public static JSONArray FileMapSort(File file) throws IOException {
        // 返回文件夹名称和创建时间
        HashMap<String, Long> fileMap = GetFolder(file.getAbsolutePath());

        List<Map.Entry<String, Long>> infoIds = new ArrayList<Map.Entry<String, Long>>(fileMap.entrySet());
        // 对HashMap中的 value 进行排序
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Long>>() {
            public int compare(Map.Entry<String, Long> o1,
                               Map.Entry<String, Long> o2) {
                return (o1.getValue()).toString().compareTo(o2.getValue().toString());
            }
        });
        ArrayList<String> idList = new ArrayList<>();

        // 对HashMap中的 value 进行排序
        for (int i = 0; i < infoIds.size(); i++) {
            String id = infoIds.get(i).toString();
            // System.out.print(id + "  ");
            idList.add(id);
        }
        JSONArray jo = Segmentation(idList);
        return jo;
    }


    /**
     * 传入字符串数组进行
     * 返回分割后的JSON
     *
     * @param tmp
     * @return
     */
    public static JSONArray Segmentation(ArrayList<String> tmp) {
        JSONArray ja = new JSONArray();
        String k = null;
        String v = null;
        int x = 1;
        for (String s : tmp) {
            String[] strArr = s.split("=");
            for (int i = 0; i < strArr.length; ++i) {
                //  System.out.println(strArr[i]);
                if (i == 0) {
                    k = strArr[i];
                } else {
                    v = strArr[i];
                }
            }

            JSONObject jo = new JSONObject();
            jo.put(k, v);
            jo.put("id",x);
            ja.add(jo);
        }
        return ja;
    }
    
}

3. Servlet
接受请求中的会话ID,与父文件夹名字一致

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置 UTF-8
        response.setContentType("text/json;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        // 获取实例ID
        String task_id = request.getParameter("task_id");
        // 需要查找的文件的绝对路径
        String dir = getServletContext().getRealPath("/") + "files/" + task_id;
        File file = new File(dir);
        JSONArray fileList = FileUtil.FileMapSort(file);

        PrintWriter out = response.getWriter();
        out.print(fileList);
        out.flush();
        out.close();
    }

4. Postman测试
《java通过文件夹创建时间排序并且返回到页面》

    原文作者:ccziwe
    原文地址: https://blog.csdn.net/weixin_45045037/article/details/94300680
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章