为实现读取文件目录下的文件信息,生成树形结构,以方便前端做一些展示
1.结构实体类
package cn.cnic.instdb.model.system;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* @Auther wdd
* @Date 2021/9/9 18:58
* @Desc 文件结构信息
*/
@Data
@Document(collection = "resource_file_tree")
public class ResourceFileTree {
@Id
private String id;
private int treeId;
private int pid;
private String resourcesId;
private String fileName;
private String filePath;
private Long size;
private Boolean isFile;
private boolean expanded = false;
}
2.读取文件目录工具类
package cn.cnic.instdb.utils;
import cn.cnic.instdb.model.system.ResourceFileTree;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.util.*;
/**
* @author wdd
* @version 1.0
* @date 2021/11/29 14:57
*/
public class FileTree {
//用于储存找到的每一个文件
List<ResourceFileTree> node=new LinkedList();
/**
* 读取文件目录返回树形结构
* @param path 文件路径
* @param id 每条记录的id
* @param pid 父id
* @param resourcesId 数据资源的id
* @param fileFilter 过滤掉某个命名的文件
* @return
*/
private List<ResourceFileTree> getFile(String path, int id, int pid, String resourcesId,String fileFilter) {
File file = new File(path);
if(file.exists()) {
File[] array = file.listFiles();
List fileList = Arrays.asList(array);
//对读到的本地文件夹进行排序
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile()){
return -1;
}
if (o1.isFile() && o2.isDirectory()){
return 1;
}
return o1.getName().compareTo(o2.getName());
}
});
for (int i = 0; i < array.length; i++) {
ResourceFileTree resourceFileTree = new ResourceFileTree();
//过滤文件
if(StringUtils.isNotBlank(fileFilter) && fileFilter.equals(array[i].getName())){
continue;
}
resourceFileTree.setResourcesId(resourcesId);
resourceFileTree.setPid(pid);
resourceFileTree.setTreeId(id);
resourceFileTree.setFilePath(array[i].getPath());
resourceFileTree.setFileName(array[i].getName());
resourceFileTree.setIsFile(array[i].isFile());
resourceFileTree.setExpanded(false);
//判断是否为文件夹,是的话进行递归
if (array[i].isDirectory()) {
node.add(resourceFileTree);
//进行递归,此时的pid为上一级的id
getFile(array[i].getPath(), id * 10 + 1 + i, id,resourcesId,fileFilter);
id++;
} else {
resourceFileTree.setSize(array[i].length());
node.add(resourceFileTree);
id++;
}
}
}
return node;
}
public List<ResourceFileTree> getFileTree(String resourcesId, String path,String fileFilter) {
node.removeAll(node);
FileTree counter = new FileTree();
int level=0;
List<ResourceFileTree> file = counter.getFile(path, 1, level,resourcesId,fileFilter);
return file;
}
public static void main(String[] args) {
FileTree counter = new FileTree();
List<ResourceFileTree> fileResourceFileTree = counter.getFileTree("5asd5as6d8asdas4dqw873e4", "D:\\wdd_work\\学习资料","neo4j图库安装文档.doc");
System.out.println(fileResourceFileTree.size());
System.out.println(fileResourceFileTree);
}
}
就这么简单,亲测已经成功使用中,如果有问题欢迎留言讨论~
如果对你有所帮助,别忘了点赞让我知道。