java 类处理工具
public class ClassUtils { private static final Logger LOGGER = LoggerFactory.getLogger(ClassUtils.class); /**
* 返回某个父类底下所有的实现类
*/public static List<Class> getSubClassesByParentClass(Class parentClass) { List<Class> returnClassList = new ArrayList<Class>(); String packageName = parentClass.getPackage().getName();
try {
List<Class> allClass = getClassesByPackageName(packageName);
for (int i = 0; i < allClass.size(); i++) {
if (parentClass.isAssignableFrom(allClass.get(i))) {
if (!parentClass.equals(allClass.get(i))) {
returnClassList.add(allClass.get(i));
}
}
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
return returnClassList;
} /**
* 从一个包中查找出所有类,在jar包中不能查找
*
* @param packageName
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public static List<Class> getClassesByPackageName(String packageName)
throws IOException, ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
} /**
*
* @param directory
* @param packageName
* @return
* @throws ClassNotFoundException
*/
public static List<Class> findClasses(File directory, String packageName)
throws ClassNotFoundException {
List<Class> classes = new ArrayList<Class>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClasses(file, packageName + '.'
+ file.getName()));
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName
+ "."
+ file.getName().substring(0,
file.getName().length() - 6)));
}
}
return classes;
} /**
* 对Map类型数据按Key排序
*
* @param map
*/public static List sort(Map map) {
List list = new ArrayList(map.keySet());
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
return a.toString().toLowerCase().compareTo(
b.toString().toLowerCase());
}
});
return list;
}
}
java 类处理工具的更多相关文章
- JDK Tools - xjc: 将 XML Schema 编译成 Java 类
xjc 是 JAXB 将 xsd 生成 Java 类的工具. 命令格式 xjc [ options ] schema file/URL/dir/jar ... [-b bindinfo ] ... 命 ...
- JDK Tools - wsimport: 编译 WSDL 生成 JAX-WS 规范的 Java 类
wsimport 命令是用来编译 wsdl 生成JAX-WS 规范的 Java 类的工具. 命令格式 wsimport [ options ] wsdl 命令参数 -s directory 指定源文件 ...
- HttpTool.java(在java tool util工具类中已存在) 暂保留
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
- Java的各种工具类
下面是java的各种工具,包括获取时间和时间比较,检验集合和字符串是否为空和长度大小等等 1 import java.io.BufferedReader; import java.io.File; i ...
- java文件处理工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...
- java格式处理工具类
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。
1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...
随机推荐
- MVC架构模式
MVC是一个框架模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器. V页面传递数据给C,C调用模型处理返回数据给V 最典型的MVC就是JSP ...
- Maximum Submatrix 2
Codeforces Round #221 (Div. 1) B:http://codeforces.com/problemset/problem/375/B 题意:给你一个n*m的0,1矩阵,你可以 ...
- Java switch-case
首先从原理上来阐述这个问题: switch(表达式){case 常量表达式1:语句1;....case 常量表达式2:语句2;default:语句;}1.default就是如果没有符合的case就执行 ...
- Spark运行各个时间段的解释
package org.apache.spark.ui private[spark] object ToolTips { val SCHEDULER_DELAY = ""& ...
- STL中的Traits编程技法
最近在看读<STL源码剖析>,看到Traits编程技法这节时,不禁感慨STL源码作者的创新能力.那么什么是Traits编程技法呢?且听我娓娓道来: 我们知道容器的许多操作都是通过迭代器展开 ...
- 如何在svn系统中使用git
如果正在使用svn,打算换到git,又暂时不想放弃已有的svn代码库,可以选择git-svn.说一说我自己从svn到git的经验吧. 开始 安装最新版本的git,从git 1.5.3以后支持git-s ...
- HNOI 2016 省队集训日记
第一天 DeepDarkFantasy 从东京出发,不久便到一处驿站,写道:日暮里. ——鲁迅<藤野先生> 定义一个置换的平方为对1~n的序列做两次该置换得到的序列.已知一个置换的平方, ...
- 线性代数(高斯消元):JSOI2008 球形空间产生器sphere
JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...
- HDOJ(HDU) 2504 又见GCD(利用最大公约数反推)
Problem Description 有三个正整数a,b,c(0 import java.util.Scanner; public class Main{ public static void ma ...
- 手把手教你把VIM改成一个集成开发环境
转载自:http://blog.csdn.net/wooin/article/details/1858917 在原文基础上经过自己验证,修改和完善 OS:Fedora19 VIM:VIM7.4 一.写 ...