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. 基于51单片机个LCD1602的万年历程序

    小白 第一次跟新博客 基于51单片机和LCD1602的万年历程序 可实现走时和调时功能 有简单的1602菜单制作 欢迎大家交流 LCD1602和51单片机的连接方法 RS = P3^5; //数据/命 ...

  2. 洛谷 P2253 好一个一中腰鼓!

    题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢 ...

  3. OpenGL Frustum参数设置

    opengl中使用Frustum来设置透视投影,函数原型: frustum(float left, float right, float buttom, float top, float near, ...

  4. 最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题 (文档 ID 1524455.1)

    适用于: Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 11.2.0.3 [发行版 10.1 到 11.2]本文档所含信息适用于所有平台 用 ...

  5. C# Process.Start方法

    System.Diagnostics.Process.Start(); 主要功能: 1.打开某个链接网址(弹窗). 2.定位打开某个文件目录. 3.打开系统特殊文件夹,如“控制面板”等. Proces ...

  6. robotframe处理日志中文问题

    unicode('${addr1.text}',"utf-8")

  7. thinkphp网站后门-发现后门(Webshell)文件

    不知道能不能解决, 1.登录阿里云后台,找到后门文件删除 2.执行 中国镜像 composer config -g repo.packagist composer https://packagist. ...

  8. BZOJ3301 P2524 UVA11525 算法解释康托展开

    这三个题的代码分别对应第二个第一个第三个 在刘汝佳蓝书上我遇到了这个康托展开题. 当时去了解了一下,发现很有意思 百度上的康托展开定义 原理介绍 编辑 康托展开运算 其中, 为整数,并且 . 的意义为 ...

  9. easyUI 之datagrid 在前端自定义排序

    首先先来看一下,直接从后台读取数据并展示到前端的列表,后端传回的数据是“按商品ID倒序排列” 前端源代码 $('#good_tables').datagrid({ nowrap: true, auto ...

  10. (6)zabbix主机与组配置

    1. 创建主机方法 1.1 新建主机configuration(配置)->Hosts(主机)->Create host(创建主机) 见前面的博文 1.2 克隆/完全克隆主机 2. 主机参数 ...