该工具类可以获取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);
}
}
分享到:
相关推荐
java获取操作系统名称,通过 System.getProperty("os.name") 由于JDK的bug,Windows Server 2012 R2获取到的System.getProperty("os.name") 为 Window NT unknown ...相关jar包:jna-4.0.0.jar jna-platform-4.0.0.jar
jar:打包工具,将相关类文件打包成一个文件。 javadoc:文档生成器,从源码注释中提取文档。 jdb:debugger,差错工具。 JDK中还包括完整的JRE(java runtime environment,Java运行环境),也被称为Private ...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
有文档,用到的工具软件,jar包,笔记,图解,源码+注释。视频太大放不上来。以下为今日教学内容,仅供参考。 14_android下的junit测试.avi 15_android下的数据持久化,保存数据到rom文件.avi 16_android_data目录下...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存...
在本地运行胶粘剂pyspark shell,胶粘剂parksubmit和pytest 现在可以通过s3支持的maven存储库中的maven构建系统使用Glue ETL jar。 我们在maven中使用copy-dependencies目标来获取本地胶水所需的所有依赖关系。 从...
Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...
请参阅将参考进行获取有关创建具有针对您技能的正确角色的AWS Lambda函数的演练。 创建函数时,选择“从头开始编写”选项,然后选择Java 8运行时。 接下来,打开终端并转到包含pom.xml的目录,然后运行“ mvn ...
NationStates Battle Simulator 是民族国家的角色扮演补充和战斗模拟器。 它旨在从用户那里获取不同战斗因素的输入:兵力计数、士气、技术、训练、战斗经验、后勤和英特尔,并模拟小规模冲突的结果以进行角色扮演。 ...