在java中读取代码行数,将某一个java项目代码输出到txt文档

本文介绍了一个用于统计项目中所有Java文件代码行数的Java程序。该程序通过递归遍历指定目录及其子目录下的所有Java文件,并统计总的代码行数。此外,还输出了Java文件的数量及每个文件的路径。

 本例子主要是在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进行查看";
    }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值