java通过文件夹创建时间排序并且返回到页面
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测试
原文作者:ccziwe
原文地址: https://blog.csdn.net/weixin_45045037/article/details/94300680
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/weixin_45045037/article/details/94300680
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章