输出该目录下指定类型文件(.cs, .java)的个数、文件的总行数、空行数、注释行数、代码行数
2015-04-05 09:57
671 查看
/** * 网上寻找的例子并修改,加以个人注释, * 取得当前项目中所有java文件总行数,代码行数,注释行数,空白行数 */ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.regex.Matcher; import java.util.regex.Pattern; //***import块实现了字符串的输入*** public class Code { @SuppressWarnings("unused") private static final String PROJECT_DIR = "D:\\eclipse"; /**此句有待探讨*/ //声明文件路径 private static int totle = 0; //总行数 private static int source = 0; //代码行数 private static int blank = 0; //空白行数 private static int comments = 0; //注释行数 //private 块实现的是声明了totle;source;blank;comments;这些私有静态的对象 /** * 读取文件夹内java文件 * */ private static void listNext(File dir) { //一个静态方法 File[] files = dir.listFiles(); //file 对象定义了文件夹内寻找,作用就是从当前所有文件和文件夹中过滤出所有文件夹 for (int i = 0; i < files.length; i++) { //判断是否是文件夹,如果是文件夹继续向下检索 if (files[i].isDirectory()) { listNext(files[i]); } else { try { if (files[i].getName().endsWith(".java")) { System.out.println(files[i].getAbsolutePath()); javaLine(files[i]); } }catch (Exception e) { //捕获异常 e.printStackTrace(); } } } } /** * 读取java文件总行数,代码行数,空白行数,注释行数 */ private static void javaLine(File f) throws FileNotFoundException, IOException{ //通过调用一个之前定义的对象来表示此文件连接,file参数表示的路径作为参数调用javaLine方法 String strLine = "";//创建了一个对象。并且加入字符串池中 String str = fromFile(f); //str为引用 "" 是 引用指向的的值,定义一个String 类型的变量str,并为其赋值 if (str.length() > 0) { while (str.indexOf('\n') != -1) { //通过一个wile循环体判断这个值,从而做到字符串处理,使得字符串以正确方式显示 totle++; strLine = str.substring(0, str.indexOf('\n')).trim(); if (strLine.length() == 0 ) { blank++; }else if (strLine.charAt(0) == '*' || strLine.charAt(0) == '/') { comments++; }else{ source++; String regEx = "^*//"; if(regEx(strLine,regEx)){ comments++; } } str = str.substring(str.indexOf('\n') + 1, str.length()); //返回给定区间的字符串,以上经过转换后,str能够正常显示 } } } /** * 将java文件以字符数组形式读取 */ private static String fromFile(File f) throws FileNotFoundException,IOException { FileInputStream fis = new FileInputStream(f); // FileInputStream类的重载,读取当前目录下的java文件 byte[] b = new byte[(int) f.length()]; //用f的长度初始化一个byte型数组;对返回的长度值做强制类型转换,转换成int型 fis.read(b); fis.close(); return new String(b);//就是返回一个b的实例 } /** * 输入字符串 * 正则匹配字符串 */ private static boolean regEx(String str,String regEx){ //如果包含正则表达式,则定义特殊的字符,regex匹配的字符串 Pattern p=Pattern.compile(regEx);//pattern类的实例表示以字符形式指定的正则表达式,此处是一个编译成某种模式 Matcher m=p.matcher(str);//创建一个匹配器 boolean result=m.find(); return result; } public static void main(String[] args) throws FileNotFoundException, IOException { File directory = new File("");//参数为空 //获取项目路径 String projectFile = directory.getCanonicalPath() ; System.out.println(projectFile+"********"); listNext(new File(projectFile)); System.out.println("文件总行数:"+totle+1); System.out.println("代码行数:"+source); System.out.println("空白行数:"+blank); System.out.println("注释行数:"+comments); } } /** * 程序经过修改调整能够运行了,不过自己还是还有很大的疑问没解决,这个程序我自己不是很理解 * 因为程序是怎么样的获取当前路径的?就仅仅是获取当前的java工程包里的所有文件的吗?那我想具体到哪个程序时 * 我不知道怎么修改,尝试多次未能成功;所以在这句时(private static final String PROJECT_DIR = "aa";),我一直 * 认为是一个路径(因为之前的都是要一个具体的路径才行的,因此有思维上的导误);当要具体到哪个程序时,该怎么做,而不是 * 是所有java包内的文件;以前都没有做过具体的去注解程序的; * 都是自己看着觉得是这样的意思,就认为是了,最多再去网上查下,但是这次是做作业,所以就认真了好多,即使自己觉得是这个意思了 * 还是会到网上去查找一下,尽量做到注解没错,而不是自己的认为的意思 * 这次的作业让自己感触挺多的。。遗憾没能做到输出具体文件的代码行数,仅仅一个总数........... */
相关文章推荐
- 输出该目录下指定类型文件(.cs, .java)的个数、文件的总行数、空行数、注释行数、代码行数
- 课程实验一:目标一:输出该目录下指定类型文件(.cs, .java)的个数、文件的总行数、空行数、注释行数、代码行数
- 挺激动的,琢磨了不久(目标1:给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数)
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 第七章:输入与输出,给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数。
- 《C#程序设计》第一次作业 给定一个源代码文件(.cs, ),输出该文件的代码行数、注释行数、空行数、代码总行数、。
- 输出该文件的总行数、空行数、注释行数、代码行数
- PHP统计目录下的文件总数及代码行数(去除注释及空行)
- PHP统计目录下的文件总数及代码行数(去除注释及空行)
- 指定一个.java文件,输出其代码行数
- Java统计目录文件下行数的总和,注释行数的总和,空行数总和
- 统计源代码文件的总行数、空行数、注释行数、代码行数
- 《Java程序设计》实验课:通过源代码文件(.cs,.java),输出文件总行数、空行数等
- 统计java代码文件的代码行数(空行、注释不能计数)