最近项目要过认证,认证中有一项是要求写项目的行数,查了下资料,特此记录;
有两种相似的方案得到项目文件的行数,如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*查询项目中总共多少行
*思路:遍历文件夹,是文件判断是不是java文件,是的话进行io操作统计行数
*/
public class TestQueryFileNumber {
private static int i;//代码总行数
private static int j;//文件总个数
public static void main(String[] args) throws IOException {
//方法一
int num = getProjectFileNumber(new File("D:\\Project\\xxxx"), ".java");
System.out.println("num=="+num);
//方法二
getProjectFileNumber1(new File("D:\\Project\\xxxxx"));//
System.out.println("j=" + j);
System.out.println("i=" + i);
}
//方法一
public static int getProjectFileNumber(File file, String endsWith) throws IOException {
int number = 0;
if (file.exists()) {
if (file.isDirectory()) {
for (File subFile : file.listFiles()) {
number += getProjectFileNumber(subFile, endsWith);
}
} else if (file.isFile() && file.getName().endsWith(endsWith)) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
while (br.readLine() != null) {
number += 1;
}
} else {
System.out.println("===" + file.getAbsolutePath());
}
}
return number;
}
//方法二
public static void getProjectFileNumber1(File file) throws IOException {
if (!file.exists()) {//文件不存在
return;
}
if (!file.isDirectory()) {//判断是否是文件
String filename = file.getName();
if (filename.endsWith(".java")) {//是否为.java文件
j++;
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String string = null;
while ((string = bufferedReader.readLine()) != null) {
i++;//读取行数
}
} else
return;
}
File[] files = file.listFiles();//读取文件夹的子文件或子文件夹
if (files == null || files.length == 0) {
return;
}
for (File file2 : files) {//如果是文件夹递归调用方法遍历文件
getProjectFileNumber1(file2);
}
}
}
注:在Android工程中运行file.exists()总为false,配置了权限也不行,故改成用Eclipse测试,两种方法运行结果一样;
注:如有问题可以回复,看到第一时间分析解决,码农不易,感觉对您有用,帮助到您,可否打赏一杯可乐,在此谢过诸位,愿诸君终成大神,前程似锦~~~