java如何读取文件目录返回树形结构
作者:小栋哟
这篇文章主要介绍了java如何读取文件目录返回树形结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
java读取文件目录返回树形结构
为实现读取文件目录下的文件信息,生成树形结构,以方便前端做一些展示
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); } }
总结
就这么简单,亲测已经成功使用中~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。