检索源码 删除无用Properties的小工具

背景:

重新做项目的过程中,引用了大量旧代码。尤其是Properties文件,里面肯定有一批是无用的,干脆笨办法直接扫描源码文件来过滤。

后续在此基础上修改修改,再做个扫描无用image文件的类。

代码如下:

  1 public class PropertiesCleaner {
  2     private static final String PROPERTIE_FILE = "D:\\Workspaces\\WebRoot\\WEB-INF\\classes\\lang_zh_TW.properties";
  3     private static final String SRC_FOLDER = "D:\\Workspaces\\WebRoot";
  4     
  5     private ArrayList<String> propertiesKeys = new ArrayList<String>();
  6     private ArrayList<File> sourceFiles = new ArrayList<File>();
  7     private ArrayList<String> deleteKeys = new ArrayList<String>();
  8     
  9     private static boolean isShowUsing = false;
 10     
 11     
 12     /**
 13      * @param args
 14      */
 15     public static void main(String[] args) {
 16         // TODO Auto-generated method stub
 17         new PropertiesCleaner().run();
 18     }
 19     
 20     public void run() {
 21         try {
 22             loadAllProperties(PROPERTIE_FILE);
 23 
 24             getAllFiles(new File(SRC_FOLDER));
 25             System.out.println("Get source files count: " + sourceFiles.size());
 26             
 27             searchFilesForProperties();
 28             
 29             deleteProperties();
 30         }catch (Exception e) {
 31             e.printStackTrace();
 32         }
 33     }
 34     
 35     private void loadAllProperties(String filePath) throws IOException {
 36         Properties pps = new Properties();
 37         InputStream in = new BufferedInputStream(new FileInputStream(filePath));
 38         pps.load(in);
 39         Enumeration en = pps.propertyNames(); 
 40         
 41         while(en.hasMoreElements()) {
 42             String strKey = (String) en.nextElement();
 43             propertiesKeys.add(strKey);
 44             //System.out.println(strKey);
 45             //String strValue = pps.getProperty(strKey);
 46             //System.out.println(strKey + "=" + strValue);
 47         }
 48         System.out.println("Get properties key count: " + propertiesKeys.size());
 49         
 50     }
 51     
 52     private void getAllFiles(File file){
 53         File[] fs = file.listFiles(new FileFilter() {
 54             
 55             @Override
 56             public boolean accept(File pathname) {
 57                 if(pathname.isDirectory())
 58                     return true;
 59                 String name = pathname.getName();
 60                 return name.endsWith(".java") || name.endsWith(".html") || name.endsWith(".js");
 61             }
 62         });
 63         for(File f:fs){
 64             if(f.isDirectory()) 
 65                 getAllFiles(f);
 66             if(f.isFile()) {
 67                 sourceFiles.add(f);
 68                 //System.out.println(f);
 69             }
 70         }
 71     }
 72     
 73     private void searchFilesForProperties() {
 74         int usedTimes = 0;
 75         int notUsedTimes = 0;
 76         for (String keyStr : propertiesKeys) {
 77             boolean isUsing = false;
 78             for (File file : sourceFiles) {
 79                 isUsing = isUsing || searchFileForKey(file, keyStr);
 80             }
 81             if(!isUsing) {
 82                 //System.out.println("Properties " + keyStr + " is not used anymore.");
 83                 notUsedTimes ++;
 84                 deleteKeys.add(keyStr);
 85             } else {
 86                 usedTimes ++;
 87             }
 88         }
 89         if (isShowUsing) {
 90             System.out.println(usedTimes + " properties are using.");
 91         }
 92         System.out.println(notUsedTimes + " properties not used anymore.");
 93     }
 94 
 95     private boolean searchFileForKey(File file, String keyword){
 96         LineNumberReader reader = null;
 97         int times = 0;
 98         try {
 99             reader = new LineNumberReader(new FileReader(file));
100             String readLine = null;
101             ArrayList<String> lines = new ArrayList<String>();
102             while((readLine = reader.readLine()) != null) {
103 //                int index = 0;
104 //                int next = 0;
105                 /*
106                 while((index = readLine.indexOf(keyword,next)) != -1) {
107                     next = index + keyword.length();
108                     times++;
109                 }
110                 if(times > 0) {
111                     System.out.println("No." + reader.getLineNumber() + " line: has " + times + " times");
112                 }
113                 */
114                 if(readLine.indexOf(keyword) != -1) {
115                     times++;
116                     lines.add(reader.getLineNumber() + ": " + readLine);
117                 }
118             }
119             if(times > 0) {
120                 if (isShowUsing) {
121                     System.out.println("Found " + keyword + " " + times + " in file " + file.getName());
122                     for (String str : lines) {
123                         System.out.println("    " + str);
124                     }
125                     System.out.println();
126                 }
127             }
128         } catch (IOException e) {
129             // TODO Auto-generated catch block
130             e.printStackTrace();
131         } finally {
132             try {
133                 if (reader != null)
134                     reader.close();
135             } catch (IOException e) {
136                 // TODO Auto-generated catch block
137                 e.printStackTrace();
138             }
139         }
140         return times > 0;
141     }
142     
143     private void deleteProperties() throws IOException, FileNotFoundException {
144         if(deleteKeys.size() == 0)
145             return;
146         
147         LineNumberReader reader = null;
148         BufferedWriter bw = null;
149         int times = 0;
150         try {
151             reader = new LineNumberReader(new FileReader(PROPERTIE_FILE));
152             String readLine = null;
153             ArrayList<String> lines = new ArrayList<String>();
154             bw = new BufferedWriter(new FileWriter(PROPERTIE_FILE+"_1"));
155             while((readLine = reader.readLine()) != null) {
156                 boolean keyInLine = false;
157                 for (String keyword : deleteKeys) {
158                     keyInLine = keyInLine || readLine.indexOf(keyword) != -1;
159                 }
160                 if(!keyInLine) {
161                     lines.add(readLine);
162                     bw.write(readLine);
163                     bw.newLine();
164                 }
165             }
166             bw.flush();
167         } catch (IOException e) {
168             // TODO Auto-generated catch block
169             e.printStackTrace();
170         } finally {
171             try {
172                 if (reader != null)
173                     reader.close();
174                 if (bw != null)
175                     bw.close();
176             } catch (IOException e) {
177                 // TODO Auto-generated catch block
178                 e.printStackTrace();
179             }
180         }
181     }
182 }
deleteProperties()这个,本来想使用Properties来做删除。网上也查到了别人写的很不错的例子,还包含了encode这些。但用的时候发现,因为我的Properties文件里
全是unicode转码过的值,encode的时候会比较麻烦。干脆直接按行直接做删除处理。性能可能一般,但是好在思路直接。

猜你喜欢

转载自www.cnblogs.com/tianxindaoren/p/9488575.html