使用递归遍历文件夹构建文件树(一)
2014-09-24 16:27
405 查看
前一段时间写了一个遍历指定路径下的文件夹,并得到指定格式的目标文件,之后构建文件树的一个小程序。
首先定义文件数据传输对象:
遍历文件夹得到文件树结构:
文件后缀过滤器:
首先定义文件数据传输对象:
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 { @Override public 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; }好,如此便可以构成文件树。注意:该方法非动态构建文件树。
相关文章推荐
- 03-python文件(文件夹复制练习)------使用递归遍历,广度遍历(队列),深度遍历(栈)
- 递归的一些方法使用:深度遍历路径中的所有文件和目录,删除一个有文件的文件夹
- 1.0使用递归操作遍历文件夹下的所有文件
- 使用CFileFind遍历递归删除文件和文件夹
- Node.js 使用递归实现遍历文件夹中所有文件
- 使用递归方法遍历文件夹下的所有文件
- Node.js使用递归实现遍历文件夹中所有文件
- 递归遍历一个文件夹,对文件进行操作,使用lstat时的悲剧
- 使用递归方式遍历指定磁盘路径下的文件及文件夹
- python使用os.walk和os.path.join来遍历文件夹的文件(包括子文件夹下的文件)
- 非递归遍历指定文件夹下的所有文件及其子文件夹 [11/29/2010 更新]
- windows编程使用递归方法遍历文件的方法
- 递归方式遍历文件夹下的所有文件及子文件夹 [php]
- Qt实现遍历文件夹和文件目录(递归)
- Java使用递归遍历文件夹
- python递归遍历文件夹检查文件
- 递归遍历一个文件夹下面的所有文件
- [C#(WebForm)] - 利用递归遍历文件夹和文件存入TreeView
- VC++/MFC 小程序 文件/目录对话框 递归遍历文件/文件夹
- java 遍历递归操作(改名) 文件/文件夹