该工具类可以获取jar包(工程项目外部或内部引用均可)中的类及对象,还可以动态获得项目打包jar后的路径信息等。
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
/**
* 获取jar的相关信息
* @author Administrator
* 2011-01-16 13:53:12
*/
public class JarTool extends URLClassLoader {
public JarTool() {
super(new URL[0]);
}
//获取外部jar包里的类
//此处的jarPath为项目工程外的jar包绝对路径名
//例如 E:/java/jar/tool.jar
public Class<?> getExternalClass(String jarPath,String classPath){
try {
addURL(new URL("file:///"+jarPath));
return findClass(classPath);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//获取内部jar包里的类
//此处的jarPath为项目工程里面的jar包相对路径名
//例如 /lib/tool.jar
public Class<?> getInternalClass(String jarPath,String classPath){
addURL(getClass().getResource(jarPath));
try {
return findClass(classPath);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
/**
* 获取jar包里的对象 用此方法不需要把jar包添加到class path中就可以用到里面的类
* 例:Object[] obj = {new String("kinganpo",24)};
* getObject("E:/java/jar/tool.jar","com.whvcse.kinganpo.Test",true,obj);
* @param jarPath jar路径
* @param className jar包里的类全名
* @param isExternal 是否为外部jar
* @param initargs 构造方法参数列表
* @return
*/
public Object getObject(String jarPath,String className,boolean isExternal,Object... initargs){
Class<?>[] clazz = null;
Class<?> c = null;
if(isExternal){
c = getExternalClass(jarPath,className);
}else{
c = getInternalClass(jarPath,className);
}
try {
if(initargs!=null){
clazz = new Class[initargs.length];
for(int i=0;i<initargs.length;i++){
//由于JDK自动装包/拆包,像int这些基本类型自动转换为Integer
//而int.class和Integer.class是不同的,所以需要判断
if(initargs[i] instanceof Integer){
clazz[i] = int.class;
}else if(initargs[i] instanceof Long){
clazz[i] = long.class;
}else if(initargs[i] instanceof Short){
clazz[i] = short.class;
}else if(initargs[i] instanceof Byte){
clazz[i] = byte.class;
}else if(initargs[i] instanceof Double){
clazz[i] = double.class;
}else if(initargs[i] instanceof Float){
clazz[i] = float.class;
}else if(initargs[i] instanceof Boolean){
clazz[i] = boolean.class;
}else{
clazz[i] = initargs[i].getClass();
}
}
return c.getConstructor(clazz).newInstance(initargs);
}else{
return c.getConstructor().newInstance();
}
} catch (Exception e) {
return null;
}
}
//获取jar绝对路径
public static String getJarPath(){
File file = getFile();
if(file==null)return null;
return file.getAbsolutePath();
}
//获取jar目录
public static String getJarDir() {
File file = getFile();
if(file==null)return null;
return getFile().getParent();
}
//获取jar包名
public static String getJarName() {
File file = getFile();
if(file==null)return null;
return getFile().getName();
}
private static File getFile() {
//关键是这行是获取当前的绝对路径信息
String path = JarTool.class.getProtectionDomain().getCodeSource().getLocation().getFile();
try{
//此行是将path中的空格和中文“乱码”转换正确回显
path = java.net.URLDecoder.decode(path, "UTF-8");
}catch (java.io.UnsupportedEncodingException e){
return null;
}
return new File(path);
}
}
分享到:
相关推荐
标题“常用jar包补充”指的是在Java开发中经常会用到的一些第三方库的jar包,这些库可以帮助开发者解决特定的问题或提供便利的功能。描述中的“博文链接:https://xiaoyongxin.iteye.com/blog/226836”表明这可能是...
在本主题中,我们主要讨论`JSONObject`及其相关的依赖jar包。 首先,`JSONObject`是`org.json`包中的核心类,它提供了丰富的API来操作JSON对象。例如,你可以通过构造函数创建一个空的JSONObject,或者从一个字符串...
具体改动可通过阅读相关文档或变更日志来获取。这个库的核心功能包括: - 字符串操作:如格式化、拼接、分割、查找和替换等。 - 类型转换:提供了安全的类型转换方法,避免了常见的ClassCastException。 - 数组处理...
3. **commons-lang3-3.0.1.jar**: 提供了对 Java 核心语言类的补充,比如字符串处理、日期时间操作、反射辅助类、枚举工具等,是日常编程中非常常用的一个库。 4. **commons-httpclient-3.1.jar**: 这是 Apache ...
在标题"org.apache.commons.io的jar包大全"中,我们可以理解这是一个包含Apache Commons IO所有版本或核心功能的jar包集合,可能包括不同版本的更新和修复。 在描述中提到"少了啥欢迎补充",这表明该压缩包可能是...
在Java开发中,个推(GeTui)是一款常见的推送服务,它提供了高效、稳定的消息推送功能,广泛应用于移动应用的后台服务。...同时,要注意及时更新jar包以获取最新的特性和支持,确保与个推服务的兼容性。
标题中的"saif相关jar包.rar"指的是一个压缩文件,其中包含了与saif相关的四个jar包:saif、saif-spring、saif-plugin以及spring。描述中提到的“之前上传的有点小问题”可能是指之前提供的版本存在错误或不完整,...
在使用Openfire的过程中,可能会遇到一些问题,比如“openfire4.1.3缺少的jar包”这样的错误提示,这通常是由于安装或运行时环境不完整导致的。为了解决这个问题,我们需要深入理解Openfire的依赖结构以及如何正确...
在这个场景中,我们提到了一个关于"java使用JSONobject所需jar包"的主题,这表明我们将讨论如何在Java中使用JSONObject类,并且提供了六个必要的jar包。 1. **JSONObject类**:JSONObject是`org.json`包中的一个类...
标题中的“jdbc_db2的jar包”指的是与IBM DB2数据库连接相关的Java档案(JAR)文件集合。这些文件是Java Database Connectivity (JDBC)驱动程序,允许Java应用程序通过网络与DB2数据库进行通信和交互。JDBC是Java...
Java中的JSON转换是开发过程中常见的任务,特别是在处理服务器与客户端之间的数据交换时。JSON(JavaScript Object Notation)是一种轻...在实际项目中,正确地导入和使用这些jar包,将极大地简化JSON相关的开发工作。
为了实现这些功能,开发者通常需要引入特定的API库,也就是所谓的jar包。标题提到的"androidwifi,有线,蓝牙开发所需要的jar包(6.0以及6.0以上)"正是为了解决这个问题,它提供了针对Android 6.0及以上版本的连接...
本文将深入探讨Spring Modules Cache在jar包`spring-modules-cache.jar`中的核心概念和实现方式。 首先,`spring-modules-cache.jar`这个jar包是Spring Modules项目的一部分,该项目旨在为Spring框架提供一系列的...
在Java编程环境中,`javax.common` jar包是一个包含多种通用工具类和接口的库,它为开发者提供了方便的功能,以简化常见的编程任务。这个jar包是Java开发中的一个第三方依赖,通常由开发者或社区为了提高代码复用性...
Java上传jar包是一个常见的开发任务,特别是在分布式系统或者云服务中,我们需要将应用程序打包成jar文件,然后通过网络上传到服务器。在这个过程中,`commons-fileupload-1.2.1.jar`和`commons-io-1.4.jar`是两个...
接下来,我们需要获取安装SVN插件所需的jar包。在提供的压缩包文件中,我们可以看到以下几个关键文件: 1. `svnkit.jar`:这是SVNKit库的核心文件,提供了与SVN服务器进行通信的API。 2. `trilead.jar`:Trilead库...
以下是关于Struts2主要jar包的详细解释: 1. **xwork-core-2.1.6.jar**:XWork是Struts2的基础,它提供了Action和ActionContext的核心功能。这个jar包包含了动作执行、类型转换、异常处理和国际化等核心组件。XWork...
以下是关于DBCP配置以及所需三个关键jar包的详细解释: 1. **commons-dbcp.jar**: 这是DBCP的主要库,包含了数据库连接池的功能实现。它提供了一个基于Jakarta Pool(现在称为Apache Commons Pool)的数据库连接...
在Java中,处理JSON数据通常需要借助特定的库,而"json处理jar包"就是这样的库,它包含了对JSON数据进行操作的功能。 在给定的压缩包文件中,包含了一些常见的Java库,这些库在处理JSON数据时起着关键作用: 1. `...
为了解决这个问题,我们需要从可靠的源获取这些缺失的jar包,比如官方仓库、第三方库或者通过Maven或Gradle这样的构建工具自动下载。一旦获取了这些jar,我们需将它们添加到项目的类路径中。这通常涉及到修改项目的`...