统计项目代码总共有多少行
思想:
1.首先将不需要迭代的文件夹,保存在集合中,不满足的就是需要迭代的文件夹
2.将需要进行统计行数的代码文件保存在集合中,满足的就是需要计算文件行数的文件
3.迭代方法:是文件夹,则进入文件夹子层,将满足条件的文件与文件夹保存在数组中
是文件,则计算+=行数
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 SetfilesName = new HashSet<>();//文件夹名称15 private Set fileType = new HashSet<>();//文件类型16 private int lines=0;//总行数17 @Test18 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 file53 */54 public void forLines(File file){55 if(file.isDirectory()){ //是----文件夹56 File[] files = file.listFiles(new FilenameFilter() { //返回true,即为满足条件的文件或者文件夹 ,保存在文件数组中57 @Override58 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 }