<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(476) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 久久久久久免费视频| 99视频在线看观免费| 日本媚薬痉挛在线观看免费| 久久狠狠爱亚洲综合影院| 亚欧色视频在线观看免费| 亚洲成aⅴ人片在线影院八| 99久久免费国产香蕉麻豆| 亚洲中文字幕无码av在线| 好男人www免费高清视频在线| 亚洲国产综合精品中文第一| 在人线av无码免费高潮喷水| 亚洲成在人线aⅴ免费毛片| 免费观看日本污污ww网站一区| 添bbb免费观看高清视频| 亚洲国产成人精品91久久久| 黄色视屏在线免费播放| 亚洲αv久久久噜噜噜噜噜| 美女内射毛片在线看免费人动物| 亚洲娇小性色xxxx| 免费a级毛片无码a∨性按摩| 三年片免费观看大全国语| 亚洲第一成年男人的天堂| 国产乱码免费卡1卡二卡3卡| 国产精品亚洲精品日韩动图| 亚洲真人无码永久在线| 99re6热视频精品免费观看 | 免费播放一区二区三区| 亚洲免费视频网址| 一区国严二区亚洲三区| 四虎国产成人永久精品免费| 亚洲综合一区国产精品| 国产亚洲精品高清在线| 麻豆一区二区免费播放网站| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲精品无码成人| 亚洲日韩精品无码专区网址| 国产成人免费午夜在线观看 | 国产真人无码作爱视频免费| 亚洲天堂免费在线| 综合亚洲伊人午夜网 | 久久久久亚洲精品美女|