`
kinganpo
  • 浏览: 51346 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

获取jar包相关信息的补充

    博客分类:
  • java
阅读更多
该工具类可以获取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包补充

    标题“常用jar包补充”指的是在Java开发中经常会用到的一些第三方库的jar包,这些库可以帮助开发者解决特定的问题或提供便利的功能。描述中的“博文链接:https://xiaoyongxin.iteye.com/blog/226836”表明这可能是...

    JSONObject依赖的jar包

    在本主题中,我们主要讨论`JSONObject`及其相关的依赖jar包。 首先,`JSONObject`是`org.json`包中的核心类,它提供了丰富的API来操作JSON对象。例如,你可以通过构造函数创建一个空的JSONObject,或者从一个字符串...

    commons-lang3-3.12.0 jar包

    具体改动可通过阅读相关文档或变更日志来获取。这个库的核心功能包括: - 字符串操作:如格式化、拼接、分割、查找和替换等。 - 类型转换:提供了安全的类型转换方法,避免了常见的ClassCastException。 - 数组处理...

    apache-common最全的jar包

    3. **commons-lang3-3.0.1.jar**: 提供了对 Java 核心语言类的补充,比如字符串处理、日期时间操作、反射辅助类、枚举工具等,是日常编程中非常常用的一个库。 4. **commons-httpclient-3.1.jar**: 这是 Apache ...

    org.apache.commons.io 的jar包大全

    在标题"org.apache.commons.io的jar包大全"中,我们可以理解这是一个包含Apache Commons IO所有版本或核心功能的jar包集合,可能包括不同版本的更新和修复。 在描述中提到"少了啥欢迎补充",这表明该压缩包可能是...

    个推所需要的jar包

    在Java开发中,个推(GeTui)是一款常见的推送服务,它提供了高效、稳定的消息推送功能,广泛应用于移动应用的后台服务。...同时,要注意及时更新jar包以获取最新的特性和支持,确保与个推服务的兼容性。

    saif相关jar包.rar

    标题中的"saif相关jar包.rar"指的是一个压缩文件,其中包含了与saif相关的四个jar包:saif、saif-spring、saif-plugin以及spring。描述中提到的“之前上传的有点小问题”可能是指之前提供的版本存在错误或不完整,...

    openfire4.1.3缺少的jar包

    在使用Openfire的过程中,可能会遇到一些问题,比如“openfire4.1.3缺少的jar包”这样的错误提示,这通常是由于安装或运行时环境不完整导致的。为了解决这个问题,我们需要深入理解Openfire的依赖结构以及如何正确...

    java使用JSONobject所需jar包

    在这个场景中,我们提到了一个关于"java使用JSONobject所需jar包"的主题,这表明我们将讨论如何在Java中使用JSONObject类,并且提供了六个必要的jar包。 1. **JSONObject类**:JSONObject是`org.json`包中的一个类...

    jdbc_db2的jar包

    标题中的“jdbc_db2的jar包”指的是与IBM DB2数据库连接相关的Java档案(JAR)文件集合。这些文件是Java Database Connectivity (JDBC)驱动程序,允许Java应用程序通过网络与DB2数据库进行通信和交互。JDBC是Java...

    java json转换所需jar包

    Java中的JSON转换是开发过程中常见的任务,特别是在处理服务器与客户端之间的数据交换时。JSON(JavaScript Object Notation)是一种轻...在实际项目中,正确地导入和使用这些jar包,将极大地简化JSON相关的开发工作。

    androidwifi,有线,蓝牙开发所需要的jar包(6.0以及6.0以上)

    为了实现这些功能,开发者通常需要引入特定的API库,也就是所谓的jar包。标题提到的"androidwifi,有线,蓝牙开发所需要的jar包(6.0以及6.0以上)"正是为了解决这个问题,它提供了针对Android 6.0及以上版本的连接...

    jar包-spring-modules-cache.jar

    本文将深入探讨Spring Modules Cache在jar包`spring-modules-cache.jar`中的核心概念和实现方式。 首先,`spring-modules-cache.jar`这个jar包是Spring Modules项目的一部分,该项目旨在为Spring框架提供一系列的...

    javax.common jar包.rar

    在Java编程环境中,`javax.common` jar包是一个包含多种通用工具类和接口的库,它为开发者提供了方便的功能,以简化常见的编程任务。这个jar包是Java开发中的一个第三方依赖,通常由开发者或社区为了提高代码复用性...

    java上传jar包

    Java上传jar包是一个常见的开发任务,特别是在分布式系统或者云服务中,我们需要将应用程序打包成jar文件,然后通过网络上传到服务器。在这个过程中,`commons-fileupload-1.2.1.jar`和`commons-io-1.4.jar`是两个...

    myeclipse安装svn插件的详细步骤及所需jar包

    接下来,我们需要获取安装SVN插件所需的jar包。在提供的压缩包文件中,我们可以看到以下几个关键文件: 1. `svnkit.jar`:这是SVNKit库的核心文件,提供了与SVN服务器进行通信的API。 2. `trilead.jar`:Trilead库...

    struts2——jar包

    以下是关于Struts2主要jar包的详细解释: 1. **xwork-core-2.1.6.jar**:XWork是Struts2的基础,它提供了Action和ActionContext的核心功能。这个jar包包含了动作执行、类型转换、异常处理和国际化等核心组件。XWork...

    配置DBCP所用到的3个jar包

    以下是关于DBCP配置以及所需三个关键jar包的详细解释: 1. **commons-dbcp.jar**: 这是DBCP的主要库,包含了数据库连接池的功能实现。它提供了一个基于Jakarta Pool(现在称为Apache Commons Pool)的数据库连接...

    json处理jar包

    在Java中,处理JSON数据通常需要借助特定的库,而"json处理jar包"就是这样的库,它包含了对JSON数据进行操作的功能。 在给定的压缩包文件中,包含了一些常见的Java库,这些库在处理JSON数据时起着关键作用: 1. `...

    Kettle (PDI) 4.3 src补充jar

    为了解决这个问题,我们需要从可靠的源获取这些缺失的jar包,比如官方仓库、第三方库或者通过Maven或Gradle这样的构建工具自动下载。一旦获取了这些jar,我们需将它们添加到项目的类路径中。这通常涉及到修改项目的`...

Global site tag (gtag.js) - Google Analytics