递归查询文件目录下所有的文件(八)
  TEZNKK3IfmPf 2023年11月15日 24 0


忽然发现,游戏并没有那么好玩,真正好玩的是什么? 人心。 而如何避免别人玩弄你的心,那就是让别人不敢玩弄你的心,代价是付不起的。 人神之恋,开始了。
上一章简单介绍了两个字符串的最大公共子串(七),如果没有看过,​​请观看上一章​​

有时候,需要根据一个目录来查询该目录下所有的文件信息。 主要是根据File 类来进行相应的处理。 这里讲其中的一种方式。

public static void showFileList(File file){
if(!file.exists()){
System.out.println("这是一个错误的路径");
}
if(file.isDirectory()){ //如果是目录的话,递归调用这个查询方法。
File []files=file.listFiles();
for (File file2 : files) {
showFileList(file2);
}
}else{
if(file.isFile()){ //如果是文件的话
//System.out.println(file.getAbsolutePath());
//System.out.println(file.getPath()+File.separator+file.getName());
System.out.println(file); //这三种方式均可以。
}
}
}

测试为:

File root=new File("D:"+File.separator+"a");
showFileList(root); //0表示的是级别

查询结果为:

递归查询文件目录下所有的文件(八)

二. 集合传入传出

上面的这个方法,输出时竟然是System.out.println() 方式进行输出的,可以做简单的测试使用,但无法在代码中进行重用的,需要将所有的文件信息都存储起来。 可以存储在一个List 集合里面, 只存储文件名,所以用 String 类型即可。与第一种方式是一样的,只是将输出语句转换成add() 方法添加到集合里面。

public static void showFileList(File file,List<String> fileNameList){
if(!file.exists()){
System.out.println("这是一个错误的路径");
}
if(file.isDirectory()){
File []files=file.listFiles();
for (File file2 : files) {
showFileList(file2);
}
}else{
//System.out.println(file.getAbsolutePath());
//System.out.println(file.getPath()+File.separator+file.getName());
if(file.isFile()){
fileNameList.add(file.getAbsolutePath());
}
}
}

集合是从外面传递进来的,当然也可以在内部进行初始化,然后返回集合。

调用形式为:

File root=new File("D:"+File.separator+"a");
List<String> fileNameList=new ArrayList<String>();
showFileList(root,fileNameList);
for(String fileName:fileNameList){
System.out.println(fileName);
}

输出的结果,与上面一样。

三. 树型展示文件列表

上面只是展示最后一层的文件名,各个文件之间不容易一眼看出级别,如果能够树型 tree 展示就很好了。

递归查询文件目录下所有的文件(八)


如这样形式的简单展示。 其实,这个主要的思想就是在文件的名称前端添加空格,后面是正常的文件名,主要是对空格进行相应的处理。

public static void showFileList(File dir,int level){
//级别进行++的处理。
System.out.println(getLevelFormatter(level)+dir.getName());
// 级别是局部参数
level++;
if(dir.isDirectory()){ //是目录的话
//列出目录下的所有文件,也可以是目录。
File[] file=dir.listFiles();
for (File file2 : file) {
showFileList(file2, level);
}
}
}

//对文件名称进行处理的方式为

public static String getLevelFormatter(int level){
StringBuilder sb=new StringBuilder("-|");
while(level>0){
// 四个空格,可以多个使用。
sb.insert(0," ");
level--;
}
return sb.toString();
}

刚开始时,传入的级别是0. 测试方法为:

File root=new File("D:"+File.separator+"a");
showFileList(root,0); //0表示的是级别

结果与上面的一致。

谢谢!!!


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   19天前   43   0   0 java
  TEZNKK3IfmPf   2024年05月31日   54   0   0 java
TEZNKK3IfmPf