1 package getMethod; 2 import java.io.*; 3 import java.util.*; 4 import java.util.regex.Matcher; 5 import java.util.regex.Pattern; 6 7 8 public class GM{ 9 10 public static void main(String[] args) throws Exception{ 11 //获取目录下的文件 12 String dir="F:\project-cif"; 13 File root=new File(dir); 14 //File[] files = root.listFiles(); 15 List<String> funs=new ArrayList<String>(); 16 //递归获取文件夹下所有的。java文件 17 File[] files =new File[1000] ; 18 List<File> allFiles=null; 19 Map<String,Integer> map=new HashMap<String,Integer>(); 20 try { 21 allFiles=showAllFiles(root); 22 } 23 catch (Exception e) { 24 // TODO Auto-generated catch block 25 e.printStackTrace(); 26 } 27 28 for(int i=0;i<allFiles.size();i++){ 29 //System.out.println(allFiles.get(i)); 30 files[i]=allFiles.get(i); 31 } 32 for(File file:files){ 33 34 35 if(file!= null){ 36 //System.out.println(file+"文件中的方法如下:"); 37 //funs.add(file.getAbsolutePath()+"文件中的方法如下:"); 38 //创建用于读取的类 39 //File a=new File(file.getAbsolutePath()); 40 //FileInputStream b=new FileInputStream(a); 41 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(file.getAbsolutePath())))); 42 43 44 45 //对文件中每行进行遍历 46 for (String line = br.readLine(); line != null; line = br.readLine()) { 47 48 //对每行进行正则匹配 49 Pattern reg=Pattern.compile("^public[\s\w]+[^(class)]"); 50 //对line进行去空格处理trim() 51 Matcher m=reg.matcher(line.trim()); 52 if(m.find()){ 53 //1.截取字符串 54 55 String methodName=getMethodName(line); 56 57 58 //对字符串进行处理 59 Pattern reg1=Pattern.compile("void"); 60 Pattern reg2=Pattern.compile("\("); 61 Matcher n1=reg1.matcher(line.trim()); 62 Matcher n2=reg2.matcher(line.trim()); 63 if(n1.find()){ 64 //System.out.println(line.trim().substring(0,line.trim().length())+""); 65 // funs.add(line.trim().substring(0,line.trim().length())+""); 66 map.put(line.trim().substring(0,line.trim().length()-1), 0); 67 } 68 else if(n2.find()){ 69 //System.out.println(line.trim().substring(0,line.trim().length())+""); 70 //funs.add(line.trim().substring(0,line.trim().length())+""); 71 map.put(line.trim().substring(0,line.trim().length()-1), 0); 72 } 73 74 //将找到的存到funs 75 //funs.add(line); 76 77 78 79 //此处将截取方法名字段放入map中 80 81 82 83 //2.将method,total放入map 84 85 86 87 } 88 } 89 90 91 92 93 br.close(); 94 95 } //String line=file.readLine(); 96 } 97 for(File file:files){ 98 if(file!= null){ 99 100 101 102 //对文件中每行进行遍历 103 for(Map.Entry<String, Integer> entry:map.entrySet()){ 104 BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream(new File(file.getAbsolutePath())))); 105 106 107 //System.out.println(entry.getValue()+"keyxxxxxxx"+entry.getKey()); 108 109 //System.out.println(br.readLine()+""); 110 //System.out.println(br1.readLine()+""); 111 112 for (String line1 = br1.readLine(); line1 != null; line1 = br1.readLine()) { 113 //Pattern reg3=Pattern.compile(entry.getKey().substring(0,entry.getKey().length()-1)+"\("); 114 //Matcher n3=reg3.matcher(line1.trim()); 115 if(line1.contains(getMethodName(entry.getKey()))){ 116 map.put(entry.getKey(),entry.getValue()+1); 117 //System.out.println("xxxxxxxxxxxxx"); 118 } 119 //System.out.println(entry.getValue()+"keyyyyyyyyyyyyyy"+entry.getKey()+entry.getKey().substring(0,entry.getKey().length()-1)); 120 } 121 122 br1.close(); 123 124 125 } 126 127 128 } 129 130 } 131 for(Map.Entry<String, Integer> entry:map.entrySet()){ 132 System.out.println("方法为"+entry.getKey()+"出现次数为"+entry.getValue()); 133 134 } 135 File funsfilecsv=new File("e:\read\funs-cif.csv"); 136 if(!funsfilecsv.exists()){ 137 funsfilecsv.createNewFile(); 138 } 139 FileWriter fileWritter = new FileWriter(funsfilecsv.getAbsolutePath()); 140 BufferedWriter bufferWritter = new BufferedWriter(fileWritter); 141 /*for(int i1=0;i1<funs.size();i1++){ 142 //System.out.println(funs.get(i1)); 143 bufferWritter.write("""+funs.get(i1).toString()+"""+" "); 144 }*/ 145 for(Map.Entry<String, Integer> entry:map.entrySet()){ 146 bufferWritter.write("""+entry.getKey()+"""+","+entry.getValue()+" "); 147 } 148 bufferWritter.close(); 149 } 150 public static List<File> resultfs=new ArrayList<File>(); 151 public static List<File> showAllFiles(File dir) throws Exception{ 152 File[] fs = dir.listFiles(); 153 154 for(int i=0; i<fs.length; i++){ 155 //System.out.println(fs[i].getAbsolutePath()); 156 if(fs[i].isDirectory()){ 157 try{ 158 showAllFiles(fs[i]); 159 }catch(Exception e){} 160 }else if(fs[i].getName().endsWith(".java")){ 161 resultfs.add(fs[i]); 162 163 } 164 } 165 //Object[] files=resultfs.toArray(); 166 // System.out.println(files); 167 //res=resultfs; 168 169 /*for(int i=0;i<resultfs.size();i++){ 170 System.out.println(resultfs.get(i)); 171 }*/ 172 return resultfs; 173 174 175 } 176 public static String getMethodName(String str){ 177 String[] s=str.trim().split(" "); 178 String result=""; 179 for(String a:s){ 180 //System.out.println(a); 181 Pattern reg=Pattern.compile("\("); 182 Matcher b=reg.matcher(a); 183 if(b.find()){ 184 //System.out.println(a); 185 String[] s1=a.trim().split("\("); 186 //System.out.println(s1[0]+"("); 187 result= s1[0]+"("; 188 189 } 190 }return result; 191 } 192 }