本篇讲述了在指定根目录下,查找根目录所有文件中,统计文件中给定单词的出现次数
运用了Java11
引入的Path
类和其静态方法of()
。 Java8
中Stream
流的 filter()
筛选,collect()
收集 ,forEach()
遍历。 Files.walk()
遍历目录和文件。
Path.of()
方法接收一个表示路径的字符串作为参数,并返回一个Path对象。
Path of = Path.of("C:\\Users\\23988\\IdeaProjects\\Multithreaded\\src\\com\\executors");
System.out.println(of);
运行结果:
Files.walk(of)
是Java中用于遍历目录和文件的方法之一。它返回一个Stream<Path>
对象,该对象包含了指定根目录下的所有子目录和文件的路径。
Path of = Path.of("C:\\Users\\23988\\IdeaProjects\\Multithreaded\\src\\com\\executors");
Stream<Path> entries = Files.walk(of);//entries 条目
entries.forEach(System.out::println);//用Stream.forEach进行遍历打印
路径下的文件:
运行结果:
filter()
:筛选
filter(Files::*isRegularFile*)
: 筛选出普通文件
filter(Files::*isRegularFile*).forEach(System.*out*::println)
;筛选出普通文件,并使用forEach()
方法打印每个文件的路径。
Path of = Path.of("C:\\Users\\23988\\IdeaProjects\\Multithreaded\\src\\com\\executors");
Stream<Path> entries = Files.walk(of);//entries 条目
entries.filter(Files::isRegularFile).forEach(System.out::println);
运行结果:
collect(Collectors.toSet())
是一个终端操作,将筛选后的文件路径结果收集到一个Set
集合中。
Path of = Path.of("C:\\Users\\23988\\IdeaProjects\\Multithreaded\\src\\com\\executors");
Stream<Path> entries = Files.walk(of);//entries 条目
Set<Path> set = entries.filter(Files::isRegularFile).collect(Collectors.toSet());
for (Path file:set) {//forEach语句
System.out.println("file"+file);
}
运行结果:
Scanner
对象的方法读取文件中的数据,并将其打印出来。 需要结合hasNext(),next(),nextLine()等方法
haNext()
:判断遍历的下一个对象是否为空
next()
:遍历一句
nextLine()
:遍历一行
Path of = Path.of("C:\\Users\\23988\\IdeaProjects\\Multithreaded\\src\\com\\executors");
Stream<Path> entries = Files.walk(of);//entries 条目
Set<Path> set = entries.filter(Files::isRegularFile).collect(Collectors.toSet());
for (Path file:set) {
System.out.println("file"+file);
Scanner in = new Scanner(file);
while (in.hasNext()){
String next = in.nextLine();
System.out.println("next:"+next);
}
}
运行结果:
in.next().equals("import")
:查看遍历的结果中是否有improt
这个字符串。最后打印出在指定根目录下的文件中,
import
出现的次数。在这里就是找那四个java文件
中(内容),import
出现的次数。
Path of = Path.of("C:\\Users\\23988\\IdeaProjects\\Multithreaded\\src\\com\\executors");
int count=0;
Stream<Path> entries = Files.walk(of);//entries 条目
Set<Path> set = entries.filter(Files::isRegularFile).collect(Collectors.toSet());
for (Path file:set) {
System.out.println("file"+file);
Scanner in = new Scanner(file);
while (in.hasNext()){
if (in.next().equals("import")){
count++;
}
}
}
System.out.println("count:"+count);
运行结果: