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

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


    網站導航:
     
    主站蜘蛛池模板: 免费被黄网站在观看| 免费黄色大片网站| 亚洲愉拍99热成人精品热久久| 国产成人精品久久亚洲高清不卡| 免费无码不卡视频在线观看| 国产成人精品亚洲2020| 最近中文字幕无免费视频| 97青青草原国产免费观看| 一级毛片a免费播放王色| 免费一级毛片清高播放| 成人一级免费视频| 国产gv天堂亚洲国产gv刚刚碰| 二区久久国产乱子伦免费精品| 亚洲AV无码一区东京热| 99在线观看视频免费| 亚洲a视频在线观看| 国产免费卡一卡三卡乱码 | 色噜噜综合亚洲av中文无码| 182tv免费观看在线视频| 亚洲日韩一区二区三区| 免费国内精品久久久久影院| jizz中国免费| 亚洲天堂中文字幕| 成人片黄网站色大片免费| 免费国产黄网站在线看| 久久夜色精品国产亚洲| 国产精品成人观看视频免费| 老子影院午夜伦不卡亚洲| 久久精品国产亚洲一区二区| 成人免费的性色视频| 精品国产亚洲第一区二区三区| 在线亚洲午夜理论AV大片| 国产精品成人免费福利| 无码的免费不卡毛片视频| 亚洲国产美国国产综合一区二区| 成人免费无码大片a毛片| 美女巨胸喷奶水视频www免费| 亚洲精品不卡视频| 亚洲无线一二三四区手机| 免费视频爱爱太爽了| fc2成年免费共享视频18|