我今天高高兴兴,想写个简单的统计一个项目下有多少行代码的小程序,于是咔咔的写下:
long count = Files.walk(Paths.get("D:/Test")) // 获得项目目录下的所有目录及文件
.filter(file -> !Files.isDirectory(file)) // 筛选出文件
.filter(file -> file.toString().endsWith(".java")) // 筛选出 java 文件
.flatMap(file -> Files.lines(file)) // 按行获得文件中的文本
.filter(line -> !line.trim().isEmpty()) // 过滤掉空行
.count();
System.out.println("代码行数:" + count);
然后,编译不过 —— 因为 Files.lines(Path)
会抛出 IOException
,如果要编译通过,得这样写:
long count = Files.walk(Paths.get("D:/Test")) // 获得项目目录下的所有文件
.filter(file -> !Files.isDirectory(file)) // 筛选出文件
.filter(file -> file.toString().endsWith(".java")) // 筛选出 java 文件
.flatMap(file -> {
try {
return Files.lines(file);
} catch (IOException ex) {
ex.printStackTrace(System.err);
return Stream.empty(); // 抛出异常时返回一个空的 Stream
}
}) // 按行获得文件中的文本
.filter(line -> !line.trim().isEmpty()) // 过滤