使用递归遍历文件夹构建文件树(一)

来源:互联网 发布:最新手机号段数据库 编辑:程序博客网 时间:2024/06/09 22:48

前一段时间写了一个遍历指定路径下的文件夹,并得到指定格式的目标文件,之后构建文件树的一个小程序。

首先定义文件数据传输对象:

public class FileDto {private String name;private String id;private List<FileDto> children;private boolean isParent = true;public boolean isParent() {return isParent;}public void setParent(boolean isParent) {this.isParent = isParent;}public String getName() {return name;}public List<FileDto> getChildren() {return children;}public void setChildren(List<FileDto> children) {this.children = children;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}}

遍历文件夹得到文件树结构:


private FileDto getFiles(String filePath, FileDto fileDto,MamFileEndFilter fileNameFilter){File root = new File(filePath);//过滤文件名File[] first = root.listFiles(fileNameFilter);//过滤文件File[] second = root.listFiles(new MamFolderFilter());//符合要求的文件File[] files = ArrayUtils.addAll(first, second);if(files == null || files.length == 0){return null; }List<FileDto> fileList = new ArrayList<>();for(File file:files){FileDto dto = new FileDto();   if(file.isDirectory()){   String str = file.getName();   dto.setId(str);   dto.setName(str);   fileList.add(dto);   //递归调用   if(file.listFiles().length != 0){   getFiles(file.getAbsolutePath(),dto,fileNameFilter);   }    }else if(files != null && files.length != 0){    FileDto valueDto = new FileDto();    valueDto.setId(file.getName());    valueDto.setName(file.getName());    valueDto.setParent(false);    fileList.add(valueDto);    }}fileDto.setChildren(fileList);return fileDto;}
filePath为文件路径,fileDto为文件DTO(fileDto已经设置了根节点),fileNameFilter为文件后缀过滤器
文件夹过滤器:

public class MamFolderFilter implements FileFilter {@Overridepublic boolean accept(File pathname) {if(pathname.isDirectory())return true;return false;}}

文件后缀过滤器:

public class MamFileEndFilter implements FilenameFilter {   private  String[] suffixs = null;   public MamFileEndFilter(String[] suffixs){   this.suffixs = suffixs;   }    @Override   public boolean accept(File dir, String name) {   return isNeed(name, suffixs);   }}public boolean isNeed(String fileName,String[] ends){         boolean tag = false;         boolean flag = false;         for(String s : ends){           if (fileName.toLowerCase().endsWith(s)){                     tag = true;                   }             if(tag == true){                flag = true;            }         }         return flag;    } 
好,如此便可以构成文件树。注意:该方法非动态构建文件树。

0 0
原创粉丝点击