版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35241080/article/details/80792107
获取指定文件夹下的所有文件夹于文件形成树结构存库,使用递归调用的方式来实现;
一 大体思路
1.首先需要一个默认指定的文件夹地址
2.需要一个树形vo类用来存放每个文件或文件夹的结构数据
3.处理函数的参数设计,需要一个可操作路径,及一个父类id
4.处理函数的思路:首先需要对传入进来的路径参数做判断,此路径是否存在,不错在抛异常结束程序运行;
存在则继而判断此路径是一个文件夹,还是一个文件,若是一个文件执行存数据封装存库操作,return结束函数运行;
若是一个文件夹也需要先进行数据封装存库,返回id做下一层子结构的父id,然后获取当前文件夹下面的所有文件夹及文件的全路径,循环调用当前函数,传入刚才存入的目录id,形成递归调用,直至函数结束运行;
二 代码实现
//我这里没有存库操作只是用来验证程序所以比较简单;
public class Tree {
private Integer id;
private String name;//文件夹或者文件名称
private String path;//全路径,或则部分路径,自己决定
private Integer parentId;//父节点id
public Tree() {
}
public Tree(Integer id, String name, String path,Integer parentId) {
this.id = id;
this.name = name;
this.path = path;
this.parentId = parentId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
@Override
public String toString() {
return "Tree{" +
"id=" + id +
", name='" + name + '\'' +
", path='" + path + '\'' +
", parentId=" + parentId +
'}';
}
}
//=====================================具体实现函数
public class FileUtil {
private static List<Tree> list = new ArrayList<>();//用来存放数据
private static Integer id = 0;//因为测试使用,当初主键id来用
public static void main(String[] args) {
String filepath="G:\\文件夹扫描";//默认路径,扫描此文件夹下面的所有文件
File file = new File(filepath);
int parentid = 0; //初始化父节点id
try {
file(filepath,parentid);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (int i = 0; i < list.size(); i++) {
Tree tree = list.get(i);
System.out.println("id:"+tree.getId()+" parentId:"+tree.getParentId()+"=="+tree.getPath());
}
/* String filepath="G:\\文件夹扫描";
File file = new File(filepath);
System.out.println(file);
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsoluteFile());
System.out.println(file.getAbsolutePath());
System.out.println(file.getAbsolutePath().replace("G:\\文件夹扫描",""));
System.out.println("-----------");
String[] list = file.list();
for (int i = 0;i<list.length;i++)
System.out.println(list[i]);*/
}
public static void file(String filepath,int parentid) throws FileNotFoundException {
File file = new File(filepath);
//1.判断文件
if(!file.exists()){
throw new FileNotFoundException("文件不存在");
}
//2.是文件该怎么执行
if(file.isFile()){
String name = file.getName();
String path = file.getAbsolutePath();
Tree tree = new Tree(id++,name,path,parentid);
list.add(tree);
return ;
}
//3.获取文件夹路径下面的所有文件递归调用;
if(file.isDirectory()){
String name = file.getName();
String path = file.getAbsolutePath();
Tree tree = new Tree(id++,name,path,parentid);
list.add(tree);
String[] list = file.list();
String parent = file.getParent();
for (int i = 0;i<list.length;i++){
String s = list[i];
String newFilePath = path+"\\"+s;//根据当前文件夹,拼接其下文文件形成新的路径
file(newFilePath,tree.getId());
}
}
}
}