1. public class ClassUtils {
  2.  
  3. private static final Logger LOGGER = LoggerFactory.getLogger(ClassUtils.class);
  4.  
  5. /**
  6. * 返回某个父类底下所有的实现类
  7. */public static List<Class> getSubClassesByParentClass(Class parentClass) {
  8.  
  9. List<Class> returnClassList = new ArrayList<Class>();
  10.  
  11. String packageName = parentClass.getPackage().getName();
  12. try {
  13. List<Class> allClass = getClassesByPackageName(packageName);
  14. for (int i = 0; i < allClass.size(); i++) {
  15. if (parentClass.isAssignableFrom(allClass.get(i))) {
  16. if (!parentClass.equals(allClass.get(i))) {
  17. returnClassList.add(allClass.get(i));
  18. }
  19. }
  20. }
  21. } catch (Exception e) {
  22. LOGGER.error(e.getMessage(), e);
  23. }
  24. return returnClassList;
  25. }
  26.  
  27. /**
  28. * 从一个包中查找出所有类,在jar包中不能查找
  29. *
  30. * @param packageName
  31. * @return
  32. * @throws IOException
  33. * @throws ClassNotFoundException
  34. */
  35. public static List<Class> getClassesByPackageName(String packageName)
  36. throws IOException, ClassNotFoundException {
  37. ClassLoader classLoader = Thread.currentThread()
  38. .getContextClassLoader();
  39. String path = packageName.replace('.', '/');
  40. Enumeration<URL> resources = classLoader.getResources(path);
  41. List<File> dirs = new ArrayList<File>();
  42. while (resources.hasMoreElements()) {
  43. URL resource = resources.nextElement();
  44. dirs.add(new File(resource.getFile()));
  45. }
  46. ArrayList<Class> classes = new ArrayList<Class>();
  47. for (File directory : dirs) {
  48. classes.addAll(findClasses(directory, packageName));
  49. }
  50. return classes;
  51. }
  52.  
  53. /**
  54. *
  55. * @param directory
  56. * @param packageName
  57. * @return
  58. * @throws ClassNotFoundException
  59. */
  60. public static List<Class> findClasses(File directory, String packageName)
  61. throws ClassNotFoundException {
  62. List<Class> classes = new ArrayList<Class>();
  63. if (!directory.exists()) {
  64. return classes;
  65. }
  66. File[] files = directory.listFiles();
  67. for (File file : files) {
  68. if (file.isDirectory()) {
  69. assert !file.getName().contains(".");
  70. classes.addAll(findClasses(file, packageName + '.'
  71. + file.getName()));
  72. } else if (file.getName().endsWith(".class")) {
  73. classes.add(Class.forName(packageName
  74. + "."
  75. + file.getName().substring(0,
  76. file.getName().length() - 6)));
  77. }
  78. }
  79. return classes;
  80. }
  81.  
  82. /**
  83. * 对Map类型数据按Key排序
  84. *
  85. * @param map
  86. */public static List sort(Map map) {
  87. List list = new ArrayList(map.keySet());
  88. Collections.sort(list, new Comparator() {
  89. public int compare(Object a, Object b) {
  90. return a.toString().toLowerCase().compareTo(
  91. b.toString().toLowerCase());
  92. }
  93. });
  94. return list;
  95. }
  96. }

java 类处理工具的更多相关文章

  1. JDK Tools - xjc: 将 XML Schema 编译成 Java 类

    xjc 是 JAXB 将 xsd 生成 Java 类的工具. 命令格式 xjc [ options ] schema file/URL/dir/jar ... [-b bindinfo ] ... 命 ...

  2. JDK Tools - wsimport: 编译 WSDL 生成 JAX-WS 规范的 Java 类

    wsimport 命令是用来编译 wsdl 生成JAX-WS 规范的 Java 类的工具. 命令格式 wsimport [ options ] wsdl 命令参数 -s directory 指定源文件 ...

  3. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  4. Java的各种工具类

    下面是java的各种工具,包括获取时间和时间比较,检验集合和字符串是否为空和长度大小等等 1 import java.io.BufferedReader; import java.io.File; i ...

  5. java文件处理工具类

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...

  6. java格式处理工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  7. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...

  8. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  9. 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。

    1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...

随机推荐

  1. CodeForces 554B(扫房间)

      CodeForces 554B Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...

  2. [walkthrough] 在Asp.net MVC6 RC里使用NLog,并且把配置集成到config.json

    说明一下:本文基于随visual studio 2015 RC公开的DNX1.0.0-beta4,git上最新的aspnet的开发版本已经发生了很大变化. 首先,理论部分看[汤姆大叔的博客] 解读AS ...

  3. HBase eclipse开发环境搭建

    伪分布式环境安装 事先本机必须部署好了伪分布式hadoop开发环境将Hbase/lib下的 hadoop-core-*.jar 与 hadoop保持一致. 将hadoop下的复制到hbase下将had ...

  4. bzoj1076

    好像题目有点问题?且现在决定不吃的宝物以后也不能再吃好像下次还是可以吃的,就是这样然后明显是状压dp,注意这道题明显倒推更容易因为顺推很可能从一个无效状态推到有效状态 ..,..] of double ...

  5. (转载)MySQL中执行sql语句反斜杠需要进行转义否则会被吃掉

    (转载)http://www.phpcode8.com/lamp/mysql-lamp/mysql-escape-slash.html 最近在执行一个sql备份的还原后,发现系统的部分路径找不到,于是 ...

  6. 图论(二分图最大权独立点集):COGS 2051. 王者之剑

    2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 这是在阿尔托 ...

  7. 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5773 题目大意: T组数据,n个数(n<=100000),求最长上升子序列长度(0可以替代任何 ...

  8. 我家用的网络IP地址给定,MAC绑定,我买了个无线路由器,请问怎么设定能让我的电脑和手机都能上网

    我家用的网络IP地址给定,MAC绑定,我买了个无线路由器,请问怎么设定能让我的电脑和手机都能上网   房东给的IP地址是:192.168.1.5 255.255.255.0 192.168.1.1 2 ...

  9. trigger 触发器

    --trigger --在SC表上建了一个触发器,查看inserted和deleted表中内容. create trigger tri_1 on sc for insert,update,delete ...

  10. android webview load 本地文件需要注意的地方

    记得在工程的main下必须是assets文件夹. 而webview.loadUrl时 必须是   android_asset 必须这样对应,否则无法加载本地html. 具体原因只能在深入学习后再总结了 ...