第3关:文件查看器(递归实现)
任务描述
本关任务:实现一个文件查看器,要实现指定文件夹下所有文件以及文件夹目录结构的展示。
相关知识
可以使用isDirectory()
方法来判断一个File
对象是否是一个文件夹。
示例:
如果D://hello
是一个文件夹,则输出true
。
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
- 实现对给定文件夹目录结构的展示,并以文件名按升序排序的形式打印至控制台。如果是文件夹则在其名字之前加上
+--
,若是文件则加上--
,上级目录与下级目录、下级文件用两个空格作为间隔,补充完善右侧代码区中的showDirStructure(File dir)
函数实现要求的功能,其中函数参数含义如下:
1).dir
:指定要显示的文件夹。
注:main
函数可点击右上角文件夹切换至本关Test.java
文件进行查看。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
样例1
输入:src/step3/root
输出:
样例2
输入:src/step3/dir
输出:
提示:java
中的File
类有listFiles
方法可以获取文件目录。
开始挑战吧,祝你成功!
实现代码
packagestep3; importjava.io.File; importjava.util.Arrays; publicclassTask { /********** Begin **********/Stringdir="+--"; Stringwj="--"; Stringlevel=""; publicvoidshowDirStructure(Filefile) { //判断是否是文件夹if(file.isDirectory()){ System.out.println(level+dir+file.getName()); Stringlevel1=level; level+=" "; File[] files=file.listFiles(); Arrays.sort(files); for (Filefile1 : files) { showDirStructure(file1); } level=level1; }else{ System.out.println(level+wj+file.getName()); } } /********** End **********/}
第4关:图片查看器(第3关的基础上加筛选)
挑战任务
本关任务:小明想要开发一个图片查看器,但是他想只显示文件夹下所有图片类型的文件。
你来帮小明实现这个功能吧。
相关知识
文件过滤器
要从列表中排除扩展名为.SYS
的所有文件,我们可以使用由功能接口FileFilter
的实例表示的文件过滤器来实现。
它包含一个accept()
方法,它将File
作为参数列出,如果应该列出文件,则返回true
。返回false
不会列出文件。
以下代码创建一个文件过滤器,将过滤扩展名为.SYS
的文件。
FileFilterfilter=file-> { if (file.isFile()) { StringfileName=file.getName().toLowerCase(); if (fileName.endsWith(".sys")) { returnfalse; } } returntrue; };
下列代码展示如何使用一个过滤器:
importjava.io.File; importjava.io.FileFilter; publicclassMain { publicstaticvoidmain(String[] args) { StringdirPath="C:\\"; Filedir=newFile(dirPath); // Create a file filter to exclude any .SYS fileFileFilterfilter=file-> { if (file.isFile()) { StringfileName=file.getName().toLowerCase(); if (fileName.endsWith(".sys")) { returnfalse; } } returntrue; }; File[] list=dir.listFiles(filter); for (Filef : list) { if (f.isFile()) { System.out.println(f.getPath() +" (File)"); } elseif (f.isDirectory()) { System.out.println(f.getPath() +" (Directory)"); } } } }
文件目录:
过滤后打印的文件目录:
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
- 实现对给定文件夹目录结构的展示,并以文件名按升序排序的形式打印至控制台。如果是文件夹则在其名字之前加上+--,若是文件则加上--,上级目录与下级目录、下级文件用两个空格作为间隔,另外需要对文件进行过滤,只显示图片类型的文件,本关需要过滤的图片文件类型有:“jpg,png,bmp”,请补充完善右侧代码区中的showDirStructure(File file)函数实现本关要求的功能,其中函数参数含义如下:
1). file
:指定要显示的文件夹。
测试说明
样例1
输入:src/step4/root
输出:
样例2
输入:src/step4/dir
输出:
开始挑战吧,祝你成功!
实现代码
packagestep4; importjava.io.File; importjava.io.FileFilter; importjava.util.Arrays; publicclassTask { /********** Begin **********/Stringdir="+--"; Stringwj="--"; Stringlevel=""; publicvoidshowDirStructure(Filefile) { //判断是否是文件夹if(file.isDirectory()){ System.out.println(level+dir+file.getName()); Stringlevel1=level; level+=" "; File[] files=file.listFiles(); Arrays.sort(files); for (Filefile1 : files) { showDirStructure(file1); } level=level1; }else{ //如果是文件,则筛选Stringname=file.getName(); if(name.endsWith("jpg")||name.endsWith("bmp")||name.endsWith("png")) System.out.println(level+wj+name); } } /********** End **********/}