java如何讀取文件目錄返回樹形結構
更新時間:2024年01月22日 09:09:35 作者:小棟喲
這篇文章主要介紹了java如何讀取文件目錄返回樹形結構問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
java讀取文件目錄返回樹形結構
為實現(xiàn)讀取文件目錄下的文件信息,生成樹形結構,以方便前端做一些展示
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 數(shù)據(jù)資源的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);
}
}總結
就這么簡單,親測已經(jīng)成功使用中~
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java實現(xiàn)加密傳輸與匿名化的實戰(zhàn)指南
隨著智慧交通系統(tǒng)的普及,交通數(shù)據(jù)已成為城市大腦的“血液”,然而,這些數(shù)據(jù)中包含的車牌號、位置坐標、出行時間等敏感信息,若未妥善保護,可能引發(fā)一系列風險,所以本文將通過 Java 實現(xiàn)加密傳輸與匿名化的實戰(zhàn),需要的朋友可以參考下2025-09-09
Java excel數(shù)據(jù)導入mysql的實現(xiàn)示例詳解
今天教大家如何使用Java將excel數(shù)據(jù)導入MySQL,文中有非常詳細的代碼示例,對正在學習java的小伙伴呢很有幫助,需要的朋友可以參考下2022-08-08
SpringBoot項目中連接Gauss數(shù)據(jù)庫
本文主要介紹了SpringBoot項目中連接Gauss數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-06-06

