浏览 1474 次
锁定老帖子 主题:获取jar包相关信息的补充
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-17
最后修改:2011-02-18
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); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |