509、java- 操作文件夹形成树形结构

获取指定文件夹下的所有文件夹于文件形成树结构存库,使用递归调用的方式来实现;

######一 大体思路

​ 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
    }
     
    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());
            }
        }
    }
}

你可能感兴趣的:(算法数据结构)