亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? genericfilecomparator.java

?? 一個簡易的輪訓小程序 哈哈哈哈哈哈后 嘿嘿嘿嘿黑誒
?? JAVA
字號:
package org.sadun.util.polling;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import org.sadun.util.BidirectionalComparator;
import org.sadun.util.ChainedComparator;

/**
 * A generic comparator that builds expressions on the file object properties.
 * 
 * @author Cristiano Sadun
 */

class GenericFileComparator implements Comparator {

    private static Map properties = new HashMap();
    private Comparator cc;
    private String specification;
    
    public GenericFileComparator(String specification) {
        this.specification=specification;
        StringTokenizer st = new StringTokenizer(specification,";");
        List comparators = new ArrayList();
        while (st.hasMoreTokens()) {
            String spec2=st.nextToken();
            comparators.add(new SingleExprComparator(spec2));
        }
        if (comparators.size()==1) cc=(Comparator)comparators.get(0);
        else {
            cc=(Comparator)comparators.get(comparators.size()-1);
            for(int i=comparators.size()-2;i>=0;i--) {
                Comparator cc1=(Comparator)comparators.get(i);
                cc=new ChainedComparator(cc1, cc);
            }
        }
    }
    
    
    private class SingleExprComparator extends BidirectionalComparator {
    
    
	    private Method methodToUse = null;
	    private Class returnType;
	
	    public SingleExprComparator(String spec) {
	        super(true);
	        parseSpec(spec);
	    }
	
	    /**
	     * @param spec
	     */
	    private void parseSpec(String spec) {
	        
            StringTokenizer st = new StringTokenizer(spec, " ");
	        while (st.hasMoreTokens()) {
	            String token = st.nextToken().trim().toLowerCase();
	            if ("ascending".equals(token))
	                ascending = true;
	            else if ("descending".equals(token))
	                ascending = false;
	            else {
	                // interpret as bean property on the File object
	                Method readMethod = (Method) properties.get(token);
	                if (readMethod == null)
	                    throw new IllegalArgumentException(
	                            "'"
	                                    + token
	                                    + "' is not a readable property for the File object. Available properties are: "+listProperties());
	                if (methodToUse != null)
	                    throw new IllegalArgumentException(
	                            "method to use specified twice:'"
	                                    + methodToUse.getName() + "' and '"
	                                    + readMethod.getName());
	                methodToUse = readMethod;
	                returnType = methodToUse.getReturnType();
	                checkSupportedType(methodToUse.getName(), returnType);
	            }
	        }
		        
	    }

	    /**
         * @return
         */
        private String listProperties() {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            for(Iterator i = properties.keySet().iterator();i.hasNext();) {
                pw.print(i.next());
                if (i.hasNext()) pw.print(", ");
            }
            return sw.toString();
        }

        /**
	     * @param returnType2
	     */
	    private void checkSupportedType(String name, Class returnType) {
	        if (returnType == Boolean.TYPE || isNumeric(returnType)
	                || returnType == String.class)
	            return;
	        throw new IllegalArgumentException(
	                "Unsupported type for readable property '" + name + "': "
	                        + returnType.getName());
	    }
	
	    private boolean isNumeric(Class returnType) {
	        return returnType == Short.TYPE || returnType == Short.class
	                || returnType == Byte.TYPE || returnType == Byte.class
	                || returnType == Character.TYPE
	                || returnType == Character.class || returnType == Long.TYPE
	                || returnType == Long.class || returnType == Integer.TYPE
	                || returnType == Integer.class || returnType == Float.TYPE
	                || returnType == Float.class || returnType == Double.TYPE
	                || returnType == Double.class;
	    }
	    
	
	    /*
	     * (non-Javadoc)
	     * 
	     * @see org.sadun.util.polling.DirectoryPoller.BidirectionalComparator#getComparationValue(java.io.File,
	     *      java.io.File)
	     */
	    protected long getComparisonValue(File f1, File f2) {
	        try {
	            Object value1 = methodToUse.invoke(f1, new Object[0]);
	            Object value2 = methodToUse.invoke(f2, new Object[0]);
	            if (isNumeric(returnType)) {
	                // Apply numerical comparison
	                double l1=Double.valueOf(value1.toString()).doubleValue();
	                double l2=Double.valueOf(value2.toString()).doubleValue();
	                return new Double(l1-l2).longValue();
	            } else if (returnType == String.class) {
	                // Apply lexical comparison
	                String s1=(String)value1;
	                String s2=(String)value2;
	                return s2.compareTo(s1);
	            } else if (returnType == Boolean.class) {
	                int b1 = ((Boolean)value1).booleanValue() ? 1 :0;
	                int b2 = ((Boolean)value1).booleanValue() ? 1 :0;
	                return b1-b2;
	            } else throw new RuntimeException("Unsupported type "+returnType);
	        } catch (IllegalAccessException e) {
	            e.printStackTrace();
	            return 0L;
	        } catch (InvocationTargetException e) {
	            e.printStackTrace();
	            return 0L;
	        }
	    }
	    
	    public String toString() {
	        return "using file's "+methodToUse.getName()+" property ("+(ascending ? "ascending" : "descending")+")";
	    }
    }

    static {
        
        List toAvoid = Arrays.asList(
                new String[] { 
                        "class", 
                        "canonicalFile", 
                        "absolute", 
                        "file", 
                        "canonicalPath", 
                        "parentFile", 
                        "path", 
                        "absolutePath",
                        "parent",
                        "absoluteFile"
                });
        
        try {
            PropertyDescriptor[] descr = Introspector.getBeanInfo(File.class)
                    .getPropertyDescriptors();
            for (int i = 0; i < descr.length; i++) {
                if (descr[i].getReadMethod() != null &&
                        ! toAvoid.contains(descr[i].getName()))
                    properties
                            .put(descr[i].getName(), descr[i].getReadMethod());
            }
            try {
                properties.put("lastmodified", File.class.getMethod(
                        "lastModified", new Class[0]));
                Method mt =File.class.getMethod("length",
                        new Class[0]);
                properties.put("size", mt);
                properties.put("length", mt);
                
                mt =File.class.getMethod("canRead",
                        new Class[0]);
                properties.put("canRead", mt);
                
                mt =File.class.getMethod("canWrite",
                        new Class[0]);
                properties.put("canWrite", mt);
                
            } catch (NoSuchMethodException e1) {
                throw new Error(
                        "The current "+GenericFileComparator.class+"  is not compatible with the version of JDK in use",
                        e1);
            }
        } catch (IntrospectionException e) {
            throw new RuntimeException(e);
        }
    }
    
    /*
     * (non-Javadoc)
     * 
     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
     */
    public int compare(Object o1, Object o2) {
        return cc.compare(o1,o2);
    }
    
    public String toString() {
        return cc.toString();
    }
    
    

    public String getSpecification() {
        return specification;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区三区在线看蜜臀 | 国产精品久久久久久久久免费桃花| 国产99久久久久| 亚洲精品国产无天堂网2021 | 国产成人精品三级| 亚洲第一av色| 国产精品久线观看视频| 日韩午夜电影在线观看| 波多野结衣在线一区| 美女免费视频一区| 亚洲摸摸操操av| 国产日产欧产精品推荐色| 欧美肥妇bbw| 一本一道波多野结衣一区二区 | 欧美日韩美少妇| www.久久精品| 国产精品正在播放| 美女脱光内衣内裤视频久久网站 | 国产女主播一区| 欧美成人精品二区三区99精品| 欧美三区在线观看| 91浏览器打开| 成人av集中营| 国产成人自拍高清视频在线免费播放| 日韩成人免费在线| 亚洲午夜在线观看视频在线| 中文字幕在线不卡视频| 久久嫩草精品久久久精品| 日韩精品综合一本久道在线视频| 欧美猛男gaygay网站| 91福利社在线观看| 色综合久久99| 在线精品视频一区二区| 91网站最新网址| 成人app在线| 成人福利视频在线看| 国产综合色产在线精品| 久久丁香综合五月国产三级网站| 日本中文字幕一区二区视频 | 久久久久久综合| 精品国产乱码久久久久久图片| 欧美一区二区三区在线观看视频| 欧美丰满少妇xxxxx高潮对白| 欧美肥妇free| 欧美成人午夜电影| www国产亚洲精品久久麻豆| 精品国产一区二区亚洲人成毛片 | 精品视频资源站| 欧美亚洲丝袜传媒另类| 欧美日本免费一区二区三区| 欧美日韩电影一区| 91精品国产综合久久香蕉的特点 | 国产视频不卡一区| 国产欧美一区二区三区沐欲| 亚洲国产成人一区二区三区| 国产精品乱码一区二三区小蝌蚪| 国产精品久线观看视频| 亚洲精品国产a| 日日摸夜夜添夜夜添精品视频| 调教+趴+乳夹+国产+精品| 日本中文一区二区三区| 国产一区二区三区黄视频 | 欧美激情一区二区三区在线| 国产精品国产三级国产aⅴ中文 | 国产一区二区0| 福利一区二区在线观看| www.成人在线| 欧美日韩高清一区二区不卡| 精品1区2区在线观看| 欧美激情一区二区| 亚洲免费看黄网站| 日韩精品91亚洲二区在线观看| 麻豆91在线播放免费| 国产98色在线|日韩| 91麻豆成人久久精品二区三区| 制服视频三区第一页精品| 日韩欧美资源站| 国产精品福利一区| 日韩综合小视频| 国产成人免费视频一区| 在线欧美小视频| 精品国产91洋老外米糕| 亚洲柠檬福利资源导航| 日韩av一二三| 成人激情校园春色| 欧美日韩国产精品自在自线| 欧美国产欧美综合| 亚欧色一区w666天堂| 国产成人综合视频| 欧美日韩精品电影| 亚洲国产精品精华液ab| 午夜精品福利在线| 国产999精品久久| 91精品国产手机| 国产精品久久久久久久久免费相片| 日韩在线卡一卡二| 波多野洁衣一区| 精品99一区二区三区| 亚洲影院在线观看| 国产成人av自拍| 日韩精品一区二区三区视频| 一区二区三区在线观看欧美| 国产成人丝袜美腿| 欧美丰满美乳xxx高潮www| 亚洲日本中文字幕区| 国内精品写真在线观看| 欧美日本一区二区三区四区| 亚洲天堂2016| 国产精品一区二区果冻传媒| 91超碰这里只有精品国产| 国产精品国产a| 国产精品一区不卡| 日韩一区二区三区视频| 午夜免费久久看| 色哦色哦哦色天天综合| 中文一区一区三区高中清不卡| 麻豆freexxxx性91精品| 欧美高清视频一二三区| 怡红院av一区二区三区| 成人美女在线视频| 久久久亚洲综合| 久草精品在线观看| 91精品国产综合久久精品性色| 一区二区三区电影在线播| 成人免费黄色大片| 久久久不卡影院| 国产一区二区影院| 欧美大片一区二区三区| 日本免费新一区视频| 91精品在线麻豆| 婷婷激情综合网| 欧美日韩高清不卡| 日韩高清一区二区| 欧美日韩国产综合草草| 亚洲 欧美综合在线网络| 欧美日韩一区二区电影| 亚洲国产婷婷综合在线精品| 欧美视频一区在线观看| 一区二区三区免费看视频| 在线观看av一区二区| 亚洲一级在线观看| 欧美综合色免费| 亚洲成a人片在线不卡一二三区| 色88888久久久久久影院野外| 亚洲精品日韩综合观看成人91| 一本色道久久综合狠狠躁的推荐 | 亚洲激情图片小说视频| 在线中文字幕一区二区| 亚洲一区二区免费视频| 欧美色精品在线视频| 亚洲高清免费观看| 91精品欧美福利在线观看| 另类欧美日韩国产在线| 精品国产91乱码一区二区三区| 国产一区二区三区在线看麻豆| 久久精品一二三| 99这里只有久久精品视频| 一区二区三区美女| 日韩一区二区三区四区| 韩国欧美国产1区| 中文字幕欧美日韩一区| 色婷婷综合久久久中文一区二区| 午夜成人免费电影| 欧美电影精品一区二区| 粉嫩av一区二区三区粉嫩| 最新日韩在线视频| 欧美日韩中文字幕一区二区| 久久精品国产第一区二区三区| 久久精品视频免费| 91蝌蚪porny| 日本欧美大码aⅴ在线播放| 国产午夜亚洲精品午夜鲁丝片| 丰满岳乱妇一区二区三区| 一区二区三区在线观看网站| 欧美成人vr18sexvr| 不卡在线观看av| 日本色综合中文字幕| 亚洲国产成人私人影院tom| 精品视频1区2区3区| 国产一区视频在线看| 一区二区视频免费在线观看| 日韩视频永久免费| av中文字幕不卡| 久久国产精品99精品国产| 中文字幕中文字幕一区二区 | 中文字幕一区二区不卡| 欧美理论片在线| 国产一区二区女| 亚洲国产wwwccc36天堂| 精品美女一区二区三区| 色综合久久精品| 国产美女在线观看一区| 亚洲国产一区二区三区| 国产精品污网站| 日韩丝袜美女视频| 欧美三级中文字幕| 成人av网站在线| 精品在线播放免费| 亚洲国产精品嫩草影院| 国产精品福利一区|