Java基础 第四节 第十课
【摘要】
综合案例
文件搜做分析代码展示
文件过滤器优化分析代码展示
Lambda 优化分析代码展示
文件搜做
搜索 C:/Users/Windows/Desktop 中的 .java ...
文件搜做
搜索 C:/Users/Windows/Desktop 中的 .java 文件.
分析
- 目录搜索, 无法判断多少级目录, 所以使用递归, 遍历所有目录
- 遍历目录时, 获取的子文件, 通过文件名称, 判断是否符合条件
代码展示
import java.io.File;
public class Test {
public static void main(String[] args) {
// 创建File对象
File dir = new File("C:/Users/Windows/Desktop");
// 调用打印目录方法
printDir(dir);
}
private static void printDir(File dir) {
// 获取子文件和目录
File[] files = dir.listFiles();
// 循环打印
for (File file : files) {
if (file.isFile()) {
// 是文件, 判断出文件名并输出文件绝对路径
if (file.getName().endsWith(".java")) {
System.out.println("文件名: " + file.getAbsolutePath());
}
} else {
// 是目录, 继续变量, 形成递归
printDir(file);
}
}
}
}
输出结果:
文件名: C:\Users\Windows\Desktop\Amherst\LAB 4\AllEqual.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB 4\Stars.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB 5\Code-Student\NestedLoop.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB 5\Code-Student\Purchase.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB1_STUDENT\MyFirstProgram.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB3 Code\Arithmeticx.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB3 Code\FahrenheitToCelsiusx.java
文件名: C:\Users\Windows\Desktop\Amherst\LAB3 Code\MPGx.java
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
文件过滤器优化
java.io.FileFilter是一个接口, 是 File 的过滤器. 该接口的对象可以传递给 FIle 类的 listFiles(FileFilter) 作为参数, 接口中只有一个方法:
boolean accept(File pathname) :
测试 pathname 是否应该包含在当前 File 目录中, 符合则返回 true
- 1
- 2
分析
- 接口作为参数, 需要传递子类对象, 重写其中方法. 我们选择匿名内部类方式, 比较简单
- accept 方法, 参数为 FIle, 表示当前 File 下所有的子文件和子目录. 保留住则返回 true, 过滤掉则返回 false (保留规则: 要么是 .java 文件, 要么是目录, 用于继续遍历)
- 通过过滤器的作用, listFiles(FileFilter) 返回数组元素中, 子文件对象都是符合条件的, 可以直接打印
代码展示
import java.io.File;
import java.io.FileFilter;
public class Test {
public static void main(String[] args) {
File dir = new File("C:/Users/Windows/Desktop");
printDir2(dir);
}
private static void printDir2(File dir) {
// 匿名内部类方式, 创建过滤器子类对象
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
for (File file : files) {
if (file.isFile()) {
System.out.println("文件名: " + file.getAbsolutePath());
} else {
printDir2(file);
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
Lambda 优化
分析
分析: FileFilter 是只有一个方法的接口, 因此可以用 Lambda 表达式简写.
Lambda 格式:
()‐>{ }
- 1
代码展示
import java.io.File;
public class Test {
public static void main(String[] args) {
File dir = new File("C:/Users/Windows/Desktop");
printDir3(dir);
}
private static void printDir3(File dir) {
// Lambda 改写
File[] files = dir.listFiles((a) -> a.getName().endsWith(".java")||a.isDirectory());
// 循环打印
for(File file:files){
if (file.isFile()){
System.out.println("文件名: " + file.getAbsolutePath());
}else{
printDir3(file);
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。
原文链接:iamarookie.blog.csdn.net/article/details/111602943
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)