Thinking in Java
          Java開發技巧與實踐
          posts - 9,comments - 6,trackbacks - 0
          Eclipse更新時會對Features和Plugins的文件進行一定的清理,經過觀察發現Eclipse的清理動作如下:
          1. Features目錄會自動更新無需手工清理。
          2. Plugins目錄中的source jar會自動清理,而運行jar包會保留之前的一個版本。
          出于冗余的考慮,一般來講不需要手工清理Plugins目錄,而手工清理通常需要借助TC等工具逐項對比后刪除,需仔細且難保出現錯誤。因此,寫了一個可自動清理Plugins中舊Jar包的輔助程序。
          該程序通過對比Plugins中相同包名的Jar包文件,自動刪除較舊的Jar包,用了一些小技巧:
          1. 比較版本時直接使用了文件的修改時間比較,當然這是一種比較懶的方法,有可能會出錯。
          2. 刪除時使用了JNA提供的刪除到回收站的方法,以防出錯后可以恢復。
          源代碼見下。

            1 package org.tsinghua.benjamin;
            2 
            3 import java.io.File;
            4 import java.io.FileFilter;
            5 import java.io.IOException;
            6 import java.util.ArrayList;
            7 import java.util.HashMap;
            8 import java.util.Iterator;
            9 import java.util.List;
           10 
           11 import com.sun.jna.platform.FileUtils;
           12 
           13 public class EclipseUpdateCleaner {
           14 
           15 //    private static final String pluginPath = "d:\\Eclipse\\x86\\Luna\\plugins\\";
           16     private static final String pluginPath = "d:\\Eclipse\\x64\\Luna\\plugins\\";
           17     private static final HashMap<String, List<String>> mapDir = new HashMap<>();
           18     private static final HashMap<String, List<String>> mapJar = new HashMap<>();
           19 
           20     private static final class PluginFilter implements FileFilter {
           21 
           22         @Override
           23         public boolean accept(File pathname) {
           24             if (pathname == null || !pathname.exists())
           25                 return false;
           26             if (pathname.isDirectory())
           27                 return true;
           28 
           29             if (pathname.getName().toLowerCase().endsWith(".jar"))
           30                 return true;
           31             return false;
           32         }
           33 
           34     }
           35 
           36     public static void main(String[] args) {
           37         File file = new File(pluginPath);
           38         if(!file.exists() || !file.isDirectory())
           39             return;
           40         
           41         File[] files = file.listFiles(new PluginFilter());
           42         for (File file2 : files) {
           43             String name = file2.getName();
           44             int index = name.indexOf('_');
           45             assert(index > 0);
           46             String key = name.substring(0, index);
           47             String value = name.substring(index + 1);
           48             if(file2.isDirectory()) {
           49                 addToMap(mapDir, key, value);
           50             } else {
           51                 addToMap(mapJar, key, value);
           52             }
           53         }
           54         
           55         System.out.println("---Dir---");
           56         recycleOldJars(mapDir);
           57         
           58         System.out.println("---Jar---");
           59         recycleOldJars(mapJar);
           60     }
           61 
           62     /**
           63      * @param map 
           64      * @param key
           65      * @param value
           66      */
           67     protected static void addToMap(HashMap<String,List<String>> map, String key, String value) {
           68         if(mapDir.containsKey(key)) {
           69             List<String> list = map.get(key);
           70             list.add(value);
           71         } else {
           72             map.put(key, new ArrayList<String>(){
           73                 private static final long serialVersionUID = 7647872335210732416L;
           74 
           75             {
           76                 add(value);
           77             }});
           78         }
           79     }
           80 
           81     /**
           82      * @param fileUtils
           83      * @param iterator
           84      */
           85     protected static void recycleOldJars(HashMap<String, List<String>> map) {
           86         Iterator<String> iterator = map.keySet().iterator();
           87         FileUtils fileUtils = FileUtils.getInstance();
           88         while(iterator.hasNext()) {
           89             String next = iterator.next();
           90             List<String> list = map.get(next);
           91             if(list.size() < 2)
           92                 continue;
           93             else {
           94                 File curr = new File(pluginPath, next + "_" + list.get(0));
           95                 List<File> files = new ArrayList<File>();
           96                 for(int i = 1; i < list.size(); i++) {
           97                     File temp = new File(pluginPath, next + "_" + list.get(i));
           98                     if(temp.lastModified() > curr.lastModified()) {
           99                         files.add(curr);
          100                         curr = temp;
          101                     }
          102                 }
          103                 
          104                 System.out.println(String.format("[new]%s", curr.getName()));
          105                 File[] rs = new File[files.size()];
          106                 for (int i = 0; i < rs.length; i++) {
          107                     rs[i] = files.get(i);
          108                     System.out.println(String.format("\t[delete]%s", rs[i].getName()));
          109                 }
          110                 
          111                 if(fileUtils.hasTrash()) {
          112                     try {
          113                         fileUtils.moveToTrash(rs);
          114                     } catch (IOException e) {
          115                         e.printStackTrace();
          116                     }
          117                 }
          118             }
          119         }
          120     }
          121 
          122 }
          123 


          無人分享的快樂不是真快樂,沒人分擔的痛苦是真痛苦。
          posted on 2015-06-11 14:12 Feenn 閱讀(484) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 辛集市| 项城市| 闽清县| 元阳县| 甘泉县| 惠来县| 福贡县| 兴隆县| 弋阳县| 广安市| 呼伦贝尔市| 淄博市| 盐津县| 白沙| 康保县| 集安市| 宁安市| 莱阳市| 秦皇岛市| 曲靖市| 岚皋县| 新源县| 应用必备| 博客| 河源市| 崇州市| 惠州市| 西峡县| 通化市| 青川县| 保德县| 垫江县| 达拉特旗| 稻城县| 手游| 古交市| 龙海市| 镇巴县| 兴隆县| 林口县| 古丈县|