本例子主要是在spring boot中运行的,如果想改成其它的,需要删除logger日志内容。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
/**
* 统计指定项目的目录下的*.java代码行数
* @author aflyun
* @date 2016.02.16
* @version 1.0
*/
public class JavaTotal {
public static Logger logger=LoggerFactory.getLogger(JavaTotal.class);
//项目java文件所在目录
public static String javaPath;//目录位置自动获取
//统计代码行数
public static Integer countCode = 0;
public static int runJavaTotal(String Url){
try {
javaPath=Url;
File filetxtPath = new File("D:/FileCount.txt");//输出要统计的文件信息
PrintWriter pw = new PrintWriter(new FileWriter(filetxtPath));
List<File> list = total(javaPath);
for (File file : list) {
String javaName = file.getAbsolutePath().replace("\\", "/");
if(javaName.endsWith(".java")){
pw.println(javaName);
}
}
pw.println("总共java文件数量 :" + list.size());
pw.close();
System.err.println("java文件数量:"+list.size());
countJavaLine(list);
System.err.println("java中总代码行数:" + countCode);
} catch (Exception e) {
}
return countCode;
}
/**
* 获取所有的文件
* @param path 获取文件的路径
* @return
*/
public static List<File> total(String path){
List<File> fileList = null;
try {
fileList = new ArrayList<File>();
File filePath = new File(path);
File[] files = filePath.listFiles();//listFiles能够获取当前文件夹下的所有文件和文件夹
for (File file : files) {
if(file.isFile() && file.getName().endsWith(".java")){
fileList.add(file);
}else {
fileList.addAll(fileList.size(), total(file.getPath()));
}
}
} catch (Exception e) {
// TODO: handle exception
}
return fileList;
}
/**
* 统计项目中java代码的行数,将文件写入到D盘,用于将代码读取到txt后缀的文件名
* @param listFile 文件的集合
*/
public static void countJavaLine(List<File> listFile){
try {
File filetxtPath = new File("D:/javaWrite.txt");//输出要统计所有代码信息
PrintWriter pw = new PrintWriter(new FileWriter(filetxtPath));
for (File file : listFile) {
if(file.getName().endsWith(".java")){
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = "";
while((line = br.readLine()) != null){
countCode ++;
// logger.info(line);//将所有代码打印到console
pw.println(line);
}
}
}
pw.close();
} catch (Exception e) {
System.err.println("统计java代码行数出错!");
}
}
}
在调用时使用:
public String getSum() throws IOException {
File directory = new File("");//设定为当前文件夹
System.out.println(directory.getCanonicalPath());//获取标准的路径
System.out.println(directory.getAbsolutePath());
logger.info("开始了");
long start = System.nanoTime();
runJavaTotal(directory.getCanonicalPath());
long end = System.nanoTime();
System.out.print("cost: " + (end - start)/1e9 + " seconds");
logger.info("完成了");
return "请在D:/javaWrite.txt进行查看";
}