【java小工具】从.java文件中筛选出方法,并计算出方法在这些文件中出现的次数
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文件中筛选出方法,并计算出方法在这些文件中出现的次数的更多相关文章
- 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码
开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows
- 经纬坐标(BLH)数据创建.kml文件小工具设计 Java版
技术背景 KML,是标记语言(Keyhole Markup Language)的缩写,最初由Keyhole公司开发,是一种基于XML 语法与格式的.用于描述和保存地理信息(如点.线.图像.多边形和模型 ...
- java小工具:通过URL连接爬取资源(图片)
java语言编写一个简单爬取网站图片工具,实现简单: 通过 java.net.HttpURLConnection 获取一个URL连接 HttpURLConnection 连接成功返回一个java.io ...
- java小工具,使用Swing展示左树右表结构
代码直接上: 入口类 import java.io.File; import java.util.ArrayList; import java.util.List; import org.json.J ...
- Java日志工具之java.util.logging.Logger
今天总结下JDK自带的日志工具Logger,虽然它一直默默无闻,但有时使用它却比较方便.更详细的信息可以查看JDK API手册,本文只是简单示例入门. 创建Logger 我们可以使用Logger的工厂 ...
- Java小工具 根据文本批量修改文件名
功能 可以根据使用路径修改文件名,已经测试,可以成功运行 思路 先是读取到txt文本文件,之后使用String的spilt进行分割,每一行的格式为 旧名字 新名字,中间的空格可以使用|或者其他字符代替 ...
- win7中java编程工具安装 java环境变量设置
一.下载java 官方地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html ...
- JAVA小工具打包
D: cd D:\xxx\IPOSpider javac -d bin/ src/com/xxx/IPOSpider.java src/com/xxx/ConfigProperties.java -c ...
- java小工具——timer
定时器Timer 用途:做定时器用的. public static void main(String[] args) { Timer timer = new Timer(); timer.schedu ...
随机推荐
- access处理重复创建表的方法。
第一种,使用MSysObjects表查找表名为当前创建表的名字的内容,相当于普通查询,但是access数据库有一个安全问题,就是有时候一开始是没有权限去调这些系统表的,这时可以再2007的access ...
- spring boot 下 dataTable|pagehelper 组合进行分页 筛选 排序
1)Js 需提前引用 jquery.dataTables $(function () { //提示信息 初始化设置 一般不需要改 var lang = { "sProcessing" ...
- 洛谷 P1514 引水入城
这次不说闲话了,直接怼题 这道题用bfs其实并不难想,但比较困难的是怎么解决满足要求时输出蓄水厂的数量.其实就像其他题解说的那样,我们可以用bfs将它转化成一个区间覆盖问题,然后再进行贪心. 首先枚举 ...
- java在线聊天项目 swt可视化窗口Design 重新设计好友列表窗口 增加菜单栏
增加的菜单栏效果图如下: eclipse 中调整到 swt的design视图下 控件区域选择Menu Controls 将Menu Bar拖动到窗口标题栏 将Cascaded Menu拖动到Menu ...
- IP数据包的校验和算法
1.算法思路: IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,算法如下: 在发送数据时,为了计算IP数据包的校验和.应该按如下步骤: (1)把IP数据包的校验和字段置为0: ( ...
- java面试宝典第三弹
Http和Https的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之 ...
- 【二分】bestcoder p1m2
模型的转化和二分check的细节挺不错的 Problem Description 度度熊很喜欢数组!! 我们称一个整数数组为稳定的,若且唯若其同时符合以下两个条件: 数组里面的元素都是非负整数. 数组 ...
- 【OS_Linux】清空终端屏幕的方法
使用clear命令或Ctrl+L组合键来清空终端屏幕,它不是真正的清空了,而是给人以错觉,当向上滚动鼠标后发现屏幕的内容依然在. 使用printf '\033c'才真正意义上清空了屏幕,它同DOS下的 ...
- CSS3-弹性盒模型-FlexBox
Flex容器属性 display 定义一个Flex容器,根据其取的值来决定是内联还是块.Flex容器会为其内容建立新的伸缩格式化上下文. .container { display: flex; /* ...
- django(django框架了解,http协议)
Django框架 学习目的: 完成web应用的编写 django的作用: 0.业务逻辑分发(路由分发) 1.业务逻辑实现: 业务逻辑根据分发来完成具体的事,再根据具体事的需求,和页面或数据库交互,返回 ...