您的位置:首页 > 其它

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

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;
    }
 
好,如此便可以构成文件树。注意:该方法非动态构建文件树。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: