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