九层之台,起于垒土,你我皆是垒土人✔
愿我的文章对你有所帮助!
欢迎===关注===点赞===评论,共同学习,共同进步!
目录
DFS即DEPTH FIRST SERVE,即从树的根节点开始遍历,从其中一个子节点开始持续向下遍历每一个节点,直至到叶子节点则返回上一级,最后回到根节点下的子节点继续往复遍历。
如下图:
根据DFS算法则遍历顺序为:1>2>5>10>6>3>7>4>8>9
通过对于某个文件夹进行遍历,并且全部输出文件夹名称以及文件名,如果是文件夹则为true,否则为false,需要用到递归来实现,即当遍历的文件夹为空时返回,实现自己调用自己。
方便对于后续的文件的遍历,不懂的可以看注释!
或者私信我哦!!
- package FileTree_Test;
- import java.util.List;
- public class FileTree {
- private List
children; - private String filename;
- private Boolean IsDirectory;
- public Boolean getIsDirectory()
- {
- return IsDirectory;
- }//获取存储是否是文件夹结果
- public void setIsDirectory(Boolean Judge)
- {
- this.IsDirectory=Judge;
- }//存储是否是文件夹的结果
- public FileTree(String filename){
- this.filename=filename;
- }
- public String getFilename() {
- return filename;
- }//获取文件名
- public void setFilename(String filename) {
- this.filename = filename;
- }
- public List
getChildren() { - return children;
- }//存储文件夹的子文件
- public void setChildren(List
children) { - this.children = children;
- }//设为子文件列表
- public void addchild(FileTree fileTree){
- children.add(fileTree);
- }//添加子文件
- public boolean islast(){
- return children==null;
- }//是否是最后的叶子节点(文件)
- }
- 需要用到的方法:
- File. listFiles() //存储该文件下所有子文件
- File.isDirectory() //判断是否为文件夹
实现思路:首先遍历根文件,判断是否是文件夹,如果是就使用一个File数组来存储通过listFiles方法获取的文件,然后再遍历File数组中的子文件夹,并且再加上根目录路径,再添加到此级的子文件数组中,最后使用遍历完成。
输出则是一级一级的遍历输出
- public static void FileToTree_DFS(FileTree root){//DFS
- File rootfile=new File(root.getFilename());
- if(!rootfile.isDirectory()){//不是文件夹设为false
- root.setIsDirectory(false);
- return;
- }else{
- root.setIsDirectory(true);
- File []children=rootfile.listFiles();//将根目录下的子文件顺序放置在一个文件数组中
- for(File child:children){
- FileTree childtree=new FileTree(root.getFilename()+"\\"+child.getName());
- if(root.getChildren()==null)
- root.setChildren(new ArrayList
()); - root.addchild(childtree);//将Line18的匿名孩子对象添加到根目录的孩子中
- FileToTree_DFS(childtree);//递归
- }
- }
- }
- public static void printfFile(FileTree fileTree){
- List
list = fileTree.getChildren(); - if (fileTree.islast())
- {
- // 空语句
- }
- else {//不为空则继续遍历
- System.out.println(fileTree.getFilename()+" "+fileTree.getIsDirectory());
- for (FileTree FileTree : list) {
- System.out.println(FileTree.getFilename()+" "+FileTree.getIsDirectory());
- }
- System.out.println("======================================");
- for (FileTree FileTree : list) {
- printfFile(FileTree);
- }
- }
- }
Tips:需要另先创建FileTree类!
- import java.util.List;
- import java.io.File;
- import java.util.ArrayList;
-
- public class FileTo_Tree {
- public static void FileToTree_DFS(FileTree root){//DFS
- File rootfile=new File(root.getFilename());
- if(!rootfile.isDirectory()){//不是文件夹设为false
- root.setIsDirectory(false);
- return;
- }else{
- root.setIsDirectory(true);
- File []children=rootfile.listFiles();//将根目录下的子文件顺序放置在一个文件数组中
- for(File child:children){
- FileTree childtree=new FileTree(root.getFilename()+"\\"+child.getName());
- if(root.getChildren()==null)
- root.setChildren(new ArrayList
()); - root.addchild(childtree);//将Line18的匿名孩子对象添加到根目录的孩子中
- FileToTree_DFS(childtree);//递归
- }
- }
- }
-
- public static void printfFile(FileTree fileTree){
- List
list = fileTree.getChildren(); - if (fileTree.islast())
- {
- // 空语句
- }
- else {//不为空则继续遍历
- System.out.println(fileTree.getFilename()+" "+fileTree.getIsDirectory());
- for (FileTree FileTree : list) {
- System.out.println(FileTree.getFilename()+" "+FileTree.getIsDirectory());
- }
- System.out.println("======================================");
- for (FileTree FileTree : list) {
- printfFile(FileTree);
- }
- }
- }
-
- public static void main(String[] args) {
- FileTree root=new FileTree("D:\\RootFile");
- //FileToTree_DFS(root);
- FileToTree_BFS(root);
- printfFile(root);
- }
- }
发文不易,恳请大佬们高抬贵手!
点赞:随手点赞是种美德,是大佬们对于本人创作的认可!
评论:往来无白丁,是你我交流的的开始!
收藏:愿君多采撷,是大佬们对在下的赞赏!