package ox4; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 递归查询一个目录中有多少行代码 */ public class Ok6 { static int i = 0; public static void main(String[] args) { String file = "d:/Java"; File f = new File(file); ss(f);
System.out.println(file1.getName()+ show1(file1)); //System.out.printf("所有的Java代码一共有%d行", i); } //递归查询 public static void ss(File file) { File[] files = file.listFiles(); for (File file1 : files) { if (file1.isDirectory()) { ss(file1); } else if (file1.isFile()) { String s = file1.getName().toLowerCase(); if (s.endsWith("java")) { //System.out.println(file1.getName()+show1(file1)); System.out.printf("%s :%d%n", file1.getName(), show1(file1)); i += show1(file1); } } } } //输出Java文件的行数 private static int show1(File file1) { int i = 0; try (var fis = new FileInputStream(file1)) { //String s = new String(fis.readAllBytes()); //定义正则表达式 Pattern p = Pattern.compile(".*\r\n"); //Matcher m = p.matcher(s); Matcher m = p.matcher(new String(fis.readAllBytes())); while (m.find()) { ++i; } } catch (IOException e) { e.printStackTrace(); } return i; }
注意:1:查询时可已将项目的目录当做参数传入,查询的使该项目中的Java源代码
2:要想查询所有项目的Java源代码
(1)可以把自己所写的全部项目都当做参数一次一次的传进去并记录每次得到的数字,最后相加得到最终的数字即为自己所写的所有的Java代码的行数
(2)也可以将自己所写的全部项目都移动到一个文件夹中,最后只需要一个文件夹当做参数传入即可(如果两个或者多个项目是用不同的开发工具写的,需要将正在使用的开发工具以管理员身份运行,否的会报异常(文件拒绝访问异常),移动项目文件后,在此发开项目后,会发现开发工具中找不到项目,这种情况需要在开发工具中选择打开项目,重新选择移动路径后的项目)