package getMethod;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class GM{ public static void main(String[] args) throws Exception{
//获取目录下的文件
String dir="F:\\project-cif";
File root=new File(dir);
//File[] files = root.listFiles();
List<String> funs=new ArrayList<String>();
//递归获取文件夹下所有的。java文件
File[] files =new File[1000] ;
List<File> allFiles=null;
Map<String,Integer> map=new HashMap<String,Integer>();
try {
allFiles=showAllFiles(root);
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} for(int i=0;i<allFiles.size();i++){
//System.out.println(allFiles.get(i));
files[i]=allFiles.get(i);
}
for(File file:files){ if(file!= null){
//System.out.println(file+"文件中的方法如下:");
//funs.add(file.getAbsolutePath()+"文件中的方法如下:");
//创建用于读取的类
//File a=new File(file.getAbsolutePath());
//FileInputStream b=new FileInputStream(a);
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(file.getAbsolutePath())))); //对文件中每行进行遍历
for (String line = br.readLine(); line != null; line = br.readLine()) { //对每行进行正则匹配
Pattern reg=Pattern.compile("^public[\\s\\w]+[^(class)]");
//对line进行去空格处理trim()
Matcher m=reg.matcher(line.trim());
if(m.find()){
//1.截取字符串 String methodName=getMethodName(line); //对字符串进行处理
Pattern reg1=Pattern.compile("void");
Pattern reg2=Pattern.compile("\\(");
Matcher n1=reg1.matcher(line.trim());
Matcher n2=reg2.matcher(line.trim());
if(n1.find()){
//System.out.println(line.trim().substring(0,line.trim().length())+"");
// funs.add(line.trim().substring(0,line.trim().length())+"");
map.put(line.trim().substring(0,line.trim().length()-1), 0);
}
else if(n2.find()){
//System.out.println(line.trim().substring(0,line.trim().length())+"");
//funs.add(line.trim().substring(0,line.trim().length())+"");
map.put(line.trim().substring(0,line.trim().length()-1), 0);
} //将找到的存到funs
//funs.add(line); //此处将截取方法名字段放入map中 //2.将method,total放入map }
} br.close(); } //String line=file.readLine();
}
for(File file:files){
if(file!= null){ //对文件中每行进行遍历
for(Map.Entry<String, Integer> entry:map.entrySet()){
BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream(new File(file.getAbsolutePath())))); //System.out.println(entry.getValue()+"keyxxxxxxx"+entry.getKey()); //System.out.println(br.readLine()+"");
//System.out.println(br1.readLine()+""); for (String line1 = br1.readLine(); line1 != null; line1 = br1.readLine()) {
//Pattern reg3=Pattern.compile(entry.getKey().substring(0,entry.getKey().length()-1)+"\\(");
//Matcher n3=reg3.matcher(line1.trim());
if(line1.contains(getMethodName(entry.getKey()))){
map.put(entry.getKey(),entry.getValue()+1);
//System.out.println("xxxxxxxxxxxxx");
}
//System.out.println(entry.getValue()+"keyyyyyyyyyyyyyy"+entry.getKey()+entry.getKey().substring(0,entry.getKey().length()-1));
} br1.close(); } } }
for(Map.Entry<String, Integer> entry:map.entrySet()){
System.out.println("方法为"+entry.getKey()+"出现次数为"+entry.getValue()); }
File funsfilecsv=new File("e:\\read\\funs-cif.csv");
if(!funsfilecsv.exists()){
funsfilecsv.createNewFile();
}
FileWriter fileWritter = new FileWriter(funsfilecsv.getAbsolutePath());
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
/*for(int i1=0;i1<funs.size();i1++){
//System.out.println(funs.get(i1));
bufferWritter.write("\""+funs.get(i1).toString()+"\""+"\n");
}*/
for(Map.Entry<String, Integer> entry:map.entrySet()){
bufferWritter.write("\""+entry.getKey()+"\""+","+entry.getValue()+"\n");
}
bufferWritter.close();
}
public static List<File> resultfs=new ArrayList<File>();
public static List<File> showAllFiles(File dir) throws Exception{
File[] fs = dir.listFiles(); for(int i=0; i<fs.length; i++){
//System.out.println(fs[i].getAbsolutePath());
if(fs[i].isDirectory()){
try{
showAllFiles(fs[i]);
}catch(Exception e){}
}else if(fs[i].getName().endsWith(".java")){
resultfs.add(fs[i]); }
}
//Object[] files=resultfs.toArray();
// System.out.println(files);
//res=resultfs; /*for(int i=0;i<resultfs.size();i++){
System.out.println(resultfs.get(i));
}*/
return resultfs; }
public static String getMethodName(String str){
String[] s=str.trim().split(" ");
String result="";
for(String a:s){
//System.out.println(a);
Pattern reg=Pattern.compile("\\(");
Matcher b=reg.matcher(a);
if(b.find()){
//System.out.println(a);
String[] s1=a.trim().split("\\(");
//System.out.println(s1[0]+"(");
result= s1[0]+"("; }
}return result;
}
}

【java小工具】从.java文件中筛选出方法,并计算出方法在这些文件中出现的次数的更多相关文章

  1. 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码

    开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows

  2. 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版

    技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...

  3. java小工具:通过URL连接爬取资源(图片)

    java语言编写一个简单爬取网站图片工具,实现简单: 通过 java.net.HttpURLConnection 获取一个URL连接 HttpURLConnection 连接成功返回一个java.io ...

  4. java小工具,使用Swing展示左树右表结构

    代码直接上: 入口类 import java.io.File; import java.util.ArrayList; import java.util.List; import org.json.J ...

  5. Java日志工具之java.util.logging.Logger

    今天总结下JDK自带的日志工具Logger,虽然它一直默默无闻,但有时使用它却比较方便.更详细的信息可以查看JDK API手册,本文只是简单示例入门. 创建Logger 我们可以使用Logger的工厂 ...

  6. Java小工具 根据文本批量修改文件名

    功能 可以根据使用路径修改文件名,已经测试,可以成功运行 思路 先是读取到txt文本文件,之后使用String的spilt进行分割,每一行的格式为 旧名字 新名字,中间的空格可以使用|或者其他字符代替 ...

  7. win7中java编程工具安装 java环境变量设置

    一.下载java 官方地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html ...

  8. JAVA小工具打包

    D: cd D:\xxx\IPOSpider javac -d bin/ src/com/xxx/IPOSpider.java src/com/xxx/ConfigProperties.java -c ...

  9. java小工具——timer

    定时器Timer 用途:做定时器用的. public static void main(String[] args) { Timer timer = new Timer(); timer.schedu ...

随机推荐

  1. POJ 3162 Walking Race (树的直径,单调队列)

    题意:给定一棵带边权的n个节点的树,首先要求出每个点的最长路,然后写成序列d[1],d[2]...d[n],然后求满足 区间最大值-区间最小值<=k 的最大区间长度为多少? 思路: 分两步进行: ...

  2. Windows64+Python27下配置matplotlib

    注:转载请注明原作者并附上原文链接! 网上看了很多方法,均遇到这样或者那样的问题导致安装失败,最后自己摸索一条方法,最终安装成功了. 1,首先安装numpy,这个可以选择install安装包,很简单, ...

  3. cgi_and_fastcgi

    CGI 来自维基百科 In computing, Common Gateway Interface (CGI) offers a standard protocol for web servers t ...

  4. KissXML类库的使用方法

    1.添加附件里面的KissXML到工程 2.加入libxml2.dylib 到Frameworks 3.修改工程信息,右击Targets下工程名选“Get Info”,进入修改Header Searc ...

  5. iphone在jsp显示时间会NAN解决办法

    例:2018-12-28 15:00:00 1.   var  newDate = new Date("2018-12-28 15:00:00") 这种获取的时间在安卓手机上显示是 ...

  6. django 2.0 + pycharm2017 出现的问题

    在创建完成app之后,在models文件里创建两个类:BlogType , Blog, 创建超级用户,注册admin,在登陆admin之后发现,发现 BlogType , Blog,并没有导入到adm ...

  7. 制作新的train,test数据集

    之前的数据集的train和test是直接按照网上下载的数据的前7000个作为训练集,后2212个作为测试集.看得出来,这个数据集是由开车录制视频转换来的图片数据,后面2000多个图片的场景和前面的场景 ...

  8. github更换仓库

    1.找到.git目录   2.打开config文件 3.修改仓库地址 4.重新提交 git push --all origin 这样就替我们的项目换仓啦!!!^_^   分类: git 参考资料: h ...

  9. No-12.函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  10. 如何让升级时AppleHDA不再折腾

    ---前提--- 1. 你得用 Clover 引导 (......) 2. 开启 kernelcache (开了也能 inject kext,还能patch kext,速度又快,为啥不开) 3. 你的 ...