java初学者弱弱的求组关于文件读取问题

sxyok 发布于 2014/03/18 11:29
阅读 136
收藏 0

读一个文件名称,
如果是.java文件,就分析出 代码行数、空行数、注释行数。
如果是文件夹,就递归分析出该文件夹下的每个java文件的代码行数、空行数、注释行数。
统计注释率、空行率、有效代码率。
把结果使用对象流保存到本地文件,可以随时读取。

这个应该怎么实现啊

以下是问题补充:

@sxyok:但是只能输出一个文件的代码行 空行和注释行 我想输出一个文件夹下面所有的java文件的信息啊 (2014/03/18 23:42)
加载中
0
Slahser__
Slahser__
package cn.slahser.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Set;

/**
 * 代码行统计工具
 * 
 * @author xiaoE
 * */
public class CodeCount {
	
	/** 不统计与主程序无关文件 */
	public static final Set<String> OUT_FILE;
	
	static {
		OUT_FILE = new HashSet<String>();
		// 代码备份工具
		OUT_FILE.add("CodeBackup.java");
		// 代码行统计工具
		OUT_FILE.add("CodeCount.java");
	}
	
	/** 代码行 */
	public long code;
	/** 注释行 */
	public long doc;
	/** 空行 */
	public long sp;
	
	private CodeCount(){}
	
	/**
	 * 递归目录下所有的.java文件
	 * 
	 * @author xiaoE
	 * @param dir 要查找的目录
	 * @throws Exception
	 */
	private void conuntAllFile(File dir) throws Exception {
		File[] childs = dir.listFiles();
		for (int i = 0; i < childs.length; i++) {
			if(OUT_FILE.contains(childs[i].getName())) {
				continue;
			}
			if (childs[i].isDirectory()) {
				this.conuntAllFile(childs[i]);
			} else if (childs[i].getName().matches(".*\\.java$")) {
				this.countCodeInFile(childs[i]);
			}
		}
	}

	/**
	 * 统计单个文件的
	 * 代码行,空行,注释行
	 * 
	 * @author xiaoE
	 * @param file 要统计文件
	 * @throws Exception 
	 */
	private void countCodeInFile(File file) throws Exception {
		BufferedReader br = null;
		boolean isComment = false;
		br = new BufferedReader(new FileReader(file));
		String line = "";
		while ((line = br.readLine()) != null) {
			line = line.trim();
			if (line.matches("^[\\s&&[^\\n]]*$")) {
				// 满足正则表达式,则为空行
				this.sp++;
			} else if (line.startsWith("/*") || isComment) {
				// 以「/*」开头的为注释
				this.doc++;
				// 不以「*/」结尾,则下一行是注释
				isComment = !line.endsWith("*/");
			} else if (line.startsWith("//")) {
				// 以「//」开头的为注释
				this.doc++;
			} else {
				// 其余为代码行
				this.code++;
			}
		}
		br.close();
	}

	public static void main(String[] args) throws Exception {
		CodeCount count = new CodeCount();
		count.conuntAllFile(new File("src"));
		System.out.println("代码行:\t" + count.code);
		System.out.println("注释行:\t" + count.doc);
		System.out.println("空行:\t" + count.sp);
	}
}



0
geng150
geng150
网上有开源的工具,下载使用。
返回顶部
顶部