统计项目代码总共有多少行
思想:
1.首先将不需要迭代的文件夹,保存在集合中,不满足的就是需要迭代的文件夹
2.将需要进行统计行数的代码文件保存在集合中,满足的就是需要计算文件行数的文件
3.迭代方法:是文件夹,则进入文件夹子层,将满足条件的文件与文件夹保存在数组中
是文件,则计算+=行数
代码如下:
1 package com.sxd.test.util; 2 3 import java.io.File; 4 import java.io.FilenameFilter; 5 import java.io.IOException; 6 import java.nio.file.Files; 7 import java.util.HashSet; 8 import java.util.Set; 9 10 import org.junit.Test; 11 12 public class ReadLines4Product { 13 14 private Set<String> filesName = new HashSet<>();//文件夹名称 15 private Set<String> fileType = new HashSet<>();//文件类型 16 private int lines=0;//总行数 17 @Test 18 public void readLines(){ 19 //将不需要计算入源码行数的 文件夹名字 存储起来 20 filesName.add("target"); 21 filesName.add(".svn"); 22 filesName.add(".settings"); 23 filesName.add("test"); 24 filesName.add("bootstrap"); 25 filesName.add("images"); 26 filesName.add("layer"); 27 filesName.add("lib"); 28 filesName.add("META-INF"); 29 filesName.add("skin"); 30 filesName.add("temp"); 31 filesName.add("upload"); 32 33 //将需要计算入源码行数的文件类型 后缀 存储起来 34 fileType.add(".java"); 35 fileType.add(".css"); 36 fileType.add(".jsp"); 37 fileType.add(".xml"); 38 fileType.add(".js"); 39 fileType.add(".properties"); 40 41 42 //查询的根路径 43 File file = new File("F:/workspace2/biologyInfo"); 44 forLines(file);//调用迭代方法 45 46 System.out.println("行数"+lines); 47 } 48 49 50 /** 51 * 用来迭代的方法 52 * @param file 53 */ 54 public void forLines(File file){ 55 if(file.isDirectory()){//是----文件夹 56 File[] files = file.listFiles(new FilenameFilter() {//返回true,即为满足条件的文件或者文件夹 ,保存在文件数组中 57 @Override 58 public boolean accept(File file, String name) { 59 if(filesName.contains(name)){ //如果文件夹的名字符合集合内的任何一个,则排除 60 return false; 61 }else if(name.lastIndexOf(".") != -1 && fileType.contains(name.substring(name.lastIndexOf("."))) || new File(file,name).isDirectory()){ 62 //如果file文件名中包含. 则是文件,否则是文件夹 && 并且文件后缀是包含于文件类型集合 63 return true; 64 } 65 return false; 66 } 67 }); 68 //循环File[]数组 69 for (File f : files) { 70 forLines(f); 71 } 72 }else{//是----文件 73 try { 74 lines += Files.lines(file.toPath()).count(); 75 } catch (IOException e) { 76 e.printStackTrace(); 77 } 78 } 79 80 } 81 }