java依赖包管理,关于JarManagerUtil包管理工具类进行jar加载及获取其class对象集等相关操作代码示例...

一、前言

通过java.util.jar.JarFile类定义JarManagerUtil管理工具类,进行指定文件loadJar加载、获取指定文件class对象集(getClazzInstances)、获取jar包文件文件getInputStream数据流等操作,详情代码示例说明。

二、代码示例import java.io.File;@b@import java.io.FileOutputStream;@b@import java.io.IOException;@b@import java.io.InputStream;@b@import java.net.URL;@b@import java.net.URLClassLoader;@b@import java.util.ArrayList;@b@import java.util.Enumeration;@b@import java.util.HashMap;@b@import java.util.List;@b@import java.util.Map;@b@import java.util.jar.JarEntry;@b@import java.util.jar.JarFile;@b@@b@public class JarManagerUtil {@b@@b@public static Map> jarClasses = new HashMap>();@b@@b@@b@/**@b@ * 加载.jar文件对象实体@b@ * @param file 传入一个.jar文件,获取.jar文件对象实体@b@ * @return@b@ */@b@public static void loadJar(File file) {@b@try {@b@if (file == null)@b@return;@b@URLClassLoader loader = new URLClassLoader(new URL[] { new URL(@b@"file:" + file.getAbsolutePath()) }, Thread.currentThread()@b@.getContextClassLoader());@b@JarFile jarFile = new JarFile(file);@b@Enumeration> enum1 = jarFile.entries();@b@while (enum1.hasMoreElements()) {@b@JarEntry entry = (JarEntry) enum1.nextElement();@b@if (entry.isDirectory())@b@continue;@b@String jar = entry.getName();@b@if (jar.endsWith(".class")) {@b@String clzname = jar.substring(0, jar.lastIndexOf(".class")).replace('/', '.');@b@Class> clz = loader.loadClass(clzname);@b@jarClasses.put(clzname, clz);@b@}@b@}@b@if(jarFile != null) jarFile.close();@b@} catch (Exception e) {@b@e.printStackTrace();@b@}@b@}@b@@b@/**@b@ * @param file 传入一个.jar文件,获取.jar文件对象实体@b@ * @return@b@ */@b@public static List> getClazzInstances(File file) {@b@try {@b@if (file == null)@b@return null;@b@URLClassLoader loader = new URLClassLoader(new URL[] { new URL(@b@"file:" + file.getAbsolutePath()) }, Thread.currentThread()@b@.getContextClassLoader());@b@List> classinstances = new ArrayList>();@b@JarFile jarFile = new JarFile(file);@b@Enumeration> enum1 = jarFile.entries();@b@while (enum1.hasMoreElements()) {@b@JarEntry entry = (JarEntry) enum1.nextElement();@b@if (entry.isDirectory())@b@continue;@b@String jar = entry.getName();@b@if (jar.endsWith(".class")) {@b@String clzname = jar.substring(0, jar.lastIndexOf(".class")).replace('/', '.');@b@Class> clz = loader.loadClass(clzname);@b@classinstances.add(clz);@b@jarClasses.put(clzname, clz);@b@}@b@}@b@if(jarFile != null) jarFile.close();@b@return classinstances;@b@} catch (Exception e) {@b@e.printStackTrace();@b@}@b@return null;@b@}@b@@b@/**@b@ * 获取属性文件实例@b@ * @param suffix TODO@b@ * @b@ */@b@public static InputStream getInputStream(File file, String suffix) {@b@InputStream is=null;@b@try {@b@if (file == null)@b@return null;@b@JarFile jarFile = new JarFile(file);@b@Enumeration> enum1 = jarFile.entries();@b@while (enum1.hasMoreElements()) {@b@JarEntry entry = (JarEntry) enum1.nextElement();@b@if (entry.isDirectory())@b@continue;@b@String jar = entry.getName();@b@if(jar.endsWith(suffix)) {@b@is= jarFile.getInputStream(entry);@b@}@b@}@b@if(jarFile != null) jarFile.close();@b@return is;@b@} catch (Exception e) {@b@e.printStackTrace();@b@}@b@return is;@b@}@b@@b@@b@/**@b@ * 判断目录中是否已存在相同名字的文件@b@ */@b@public static boolean existsSameJar(String path,String filename){@b@File file = new File(path);@b@String jarPath = file.getPath()+"/"+filename;@b@File jar = new File(jarPath);@b@return jar.exists();@b@}@b@@b@/**@b@ * 在传入路径中创建文件@b@ * @param data@b@ * @param filename@b@ * @return@b@ */@b@public static File createTempFile(byte[] data,String filename,String path){@b@FileOutputStream fos = null;@b@path = path+"/temp";@b@File f=new File(path);@b@if(!f.exists()){@b@f.mkdirs();@b@}@b@try{@b@fos = new FileOutputStream(f.getPath()+'/'+filename);@b@fos.flush();@b@fos.write(data);@b@return new File(path+'/'+filename);@b@}catch(Exception e1){@b@e1.printStackTrace();@b@}finally{@b@try {@b@if (fos != null) fos.close();@b@} catch (IOException e) {@b@e.printStackTrace();@b@}@b@}@b@return null;@b@}@b@@b@@b@}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值