package com.lz.mysql; import java.io.*; import java.util.ArrayList; import java.util.List; public class ControlScanner { private String filePath;//文件地址 static final String[] notesSym = {"/*", "*/", "//", "\\n"};//注释符号,成对出现,偶数为起始符号,奇数为结束符号 private String packageName;//包名 private String name;//类名 List importList = new ArrayList<>();//引入的包名 List functionDesList = new ArrayList<>();//方法对象集合 List attributeDesList = new ArrayList<>();//属性对象集合 public void startScanner(String filePath){ File file = new File(filePath); if(file.exists()){ // try { BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); String strLine = null; int lineCount = 0; while(null != (strLine = bufferedReader.readLine())){ strLine = pretreatment(strLine); CheckType checkType = checkLineStart(strLine); strLine = strLine.substring(checkType.getStart()); checkLineEnd(checkType, strLine); } } catch (FileNotFoundException e) { e.printStackTrace(); //文件异常 } catch (IOException e) { e.printStackTrace(); //读取文件失败 } } } private String pretreatment(String strLine){ strLine = strLine.replace("\t", " "); strLine = removeMoreSpace(strLine); strLine = strLine.replace("\r\n", "\n"); return strLine; } private String removeMoreSpace(String strLine){ int start = 0; while(strLine.charAt(start) == ' '){ start++; } if(start > 0){ strLine = strLine.substring(start); } String newLine; return strLine; } private CheckType checkLineStart(String strLine){ CheckType checkType = new CheckType(); switch (strLine.charAt(0)){ case '/':// /* // if(strLine.charAt(1) == '/'){ checkType.setType(0); //checkType.setEnd(true); }else if(strLine.charAt(1) == '*'){ checkType.setType(1); /*if(strLine.length() > 3 && strLine.charAt(strLine.length() - 1) == '/' && strLine.charAt(strLine.length() - 2) == '*'){ checkType.setEnd(true); }*/ } checkType.setStart(2); break; case 'i'://import if(strLine.startsWith("import ")){ checkType.setType(2); checkType.setStart(7); } break; case 'p':// public private proteced package if(strLine.startsWith("public ")){ checkType.setType(3); checkType.setStart(7); }else if(strLine.startsWith("private ")){ checkType.setType(4); checkType.setStart(8); }else if(strLine.startsWith("proteced ")){ checkType.setType(5); checkType.setStart(9); }else if(strLine.startsWith("package ")){ checkType.setType(6); checkType.setStart(8); } break; default: checkType.setType(50); checkType.setStart(0); break; } /*if((type == 0 || type > 2) && strLine.charAt(strLine.length() - 1) == ';'){ checkType.setEnd(true); }*/ return checkType; } private CheckType checkLineEnd(CheckType checkType, String strLine){ if(checkType.getType() > 1){//处理非注释代码中的多余的空格替换成一个,引号内的不处理 } return checkType; } public class CheckType{ //1:// 2:/* 3:import 4:public 5:private 6:proteced 7:package 50:未找到关键字 private int type; private int start; private boolean isEnd;//一行代码是否读取完毕 public int getType() { return type; } public void setType(int type) { this.type = type; } public int getStart() { return start; } public void setStart(int start) { this.start = start; } public boolean isEnd() { return isEnd; } public void setEnd(boolean end) { isEnd = end; } } }