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. SQL还原数据库

    还原一个备份数据库的经历. 首先,手头上有工程文件及相应的数据库的备份. 步骤: 1.在工程文件里找到配置文件,我这个是在bin目录里找到config.ini 2.双击打开它,里面有一些数据库的相关信 ...

  2. SQLite连接

    SQLite -连接 SQLite的联接子句用于从数据库中的两个或多个表合并的记录.JOIN是用于通过使用共同的每个值从两个表结合域的装置. SQL定义了三个主要类型的连接: CROSS JOIN I ...

  3. R文件报错的原因

    一般R文件报错,无非是资源文件错误,图片命名错误,但是编译都会报错,可以很快解决.但是前几天,引入一个第三方aar包后,项目编译正确,但是就是R文件报错,找不到R文件,整个项目一片报红. 1)首先编译 ...

  4. winhex与磁盘格式与 数据恢复

    第一阶段: 熟悉WinHex的使用. n 熟悉磁盘工具的使用. n 利用WinHex查看物理磁盘和逻辑磁盘. n 了解WinHex中相关工具的用法. 以管理员身份运行winhex(以便之后修改) 上方 ...

  5. html输入框去除记忆功能

    自动完成功能,只需把AUTOCOMPLETE设为off即可,如: 整个表单禁止自动完成 HTML code <FORM method=post action="submit.asp&q ...

  6. 国庆集训 || Wannafly Day4

    链接:https://www.nowcoder.com/acm/contest/205#question 一场题面非常 有趣 但是题目非常 不友好的比赛 QAQ L.数论之神   思维(?) 题意:求 ...

  7. 题解 P5082 【成绩】

    随机跳题跳到了这一题,一看是个红题,本蒟蒻就 艰难地思考起来 高兴地写起来 这题实在不能用数组,用了数组就RE 一开始就卡在这上面了 说实话,这道题真的 很难 不算很难,只要照着公式往上面套就行了 废 ...

  8. SNP|RELP|genetic polymorphism|

    5.3个体基因组呈现广泛变化 遗传多态性:一个基因座上存在多个等位基因(因为野生型不止一种基因)的现象,但是只有这多种等位基因满足:1.多个基因稳定存在2.基因在种群中数目大于1%时,认为该基因座多态 ...

  9. bootstrap历练实例:标签式的导航菜单

    本章将讲解bootstrap提供的用于定义导航元素的一些选项,它使用相同的标签和基类.nav.Bootsrtap也提供了一个用于共享标记和状态的帮助器类.改变修饰的class,可以在不同的样式间进行切 ...

  10. VUE2中axios的使用方法

    一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request 拦截器,添加数据请求公用信息 axio ...