您的位置:首页 > 其它

动态加载一个或多个jar文件

2016-04-21 21:31 507 查看
1,使用

package com;

import java.io.File;

import java.net.URLClassLoader;

public class ClassLoad {

static URLClassLoader loader = null;

/**

  * 在默认的目录加载jar

  * @return

  */

public static URLClassLoader getClassLoad(){

if (loader == null) {

URLClassLoaderUtil urlClass = new URLClassLoaderUtil("d:\\test.jar", false);

loader = urlClass.getClassLoader();

}

return loader;

}

/**

  * 在给定的路径加载jar文件

  * @param url 指定路径

  * @param isFile true 文件 false 目录

  * @return

  */

public static URLClassLoader getClassLoad(String url, boolean isFile){

URLClassLoaderUtil urlClass = new URLClassLoaderUtil(url, false);

URLClassLoader loader = urlClass.getClassLoader();

return loader;

  }

}

2,工具类

package com;

import java.io.File;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLClassLoader;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.List;

import java.util.jar.JarEntry;

import java.util.jar.JarFile;

public class URLClassLoaderUtil {

URLClassLoader classLoader = null;// URLClassLoader类载入器

private String jarFileName;

private boolean isFile = true;

List<String> jars = new ArrayList<String>(0);

/**

* * 加载具体的某一jar包

* *

* *

* @param jarFileName

*

*/

public URLClassLoaderUtil(String jarFileName)

{

this.setJarFileName(jarFileName);

this.inti();

}

/**

* * 加载jar包 当isFile为false是加载文件夹下所有jar

* *

* *

* @param jarFileName

* * 路径

* *

* @param isFile

*

*/

public URLClassLoaderUtil(String jarFileName, boolean isFile)

{

this.setJarFileName(jarFileName);

this.setFile(isFile);

this.inti();

}

/**

*

* *初始化,读取文件信息,并将jar文件路径加入到classpath

*

*/

private void inti() {

// 添加jar文件路径到classpath

if (this.isFile)

{

File f = new File(jarFileName);

addPath(f.toURI().toString());

jars.add(f.getAbsolutePath());

}

else

{

ReadJarFile df = new ReadJarFile(jarFileName, new String[] { "jar", "zip" });

this.jars = df.getJarList();

List<String> jarURLs = df.getFilesURL();

Object[] obj = jarURLs.toArray();

addPath(obj);

}

/**

  *回叫方法,class操作

  *

  *@paramcallBack

  */

  public void callBack() {

for (String s1:this.jars) {

loadClass(s1);

   }

}

/**

  *添加单个jar路径到classpath

  *

  *@paramjarURL

  */

private void addPath(String jarURL) {

try {

classLoader = new URLClassLoader(new URL[] { new URL(jarURL) });

} catch (MalformedURLException e) {

e.printStackTrace();

}

  }

/**

  *添加jar路径到classpath

  *@paramjarURLs

  */

private void addPath(Object[] jarURLs) {

URL[] urls = new URL[jarURLs.length];

for (int i = 0; i < jarURLs.length; i++) {

try {

System.out.println(jarURLs[i].toString());

urls[i] = new URL(jarURLs[i].toString());

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

classLoader = new URLClassLoader(urls);

  }

/**

  *动态载入class

  *

  *@paramjarFileName

  *@paramcallBack

  */

private void loadClass(String jarFileName) {

JarFile jarFile = null;

try {

jarFile = new JarFile(jarFileName);

} catch (IOException e) {

e.printStackTrace();

}

Enumeration<JarEntry> en = jarFile.entries();

while (en.hasMoreElements()) {

JarEntry je = en.nextElement();

String name = je.getName();

String s5 = name.replace('/', '.');

int k=s5.lastIndexOf(".class");

if(k>0){

String className = je.getName().substring(0,je.getName().length() - ".class".length()).replace('/','.');

Class c = null;

try {

c = this.classLoader.loadClass(className);

System.out.println(className);

} catch (ClassNotFoundException e) {

System.out.println("NO CLASS: " + className);

// continue;

} catch (NoClassDefFoundError e) {

System.out.println("NO CLASS: " + className);

// continue;

}

}

}

}

public URLClassLoader getClassLoader() {

return classLoader;

}

public void setClassLoader(URLClassLoader classLoader) {

this.classLoader = classLoader;

}

public String getJarFileName() {

return jarFileName;

}

public void setJarFileName(String jarFileName) {

this.jarFileName = jarFileName;

}

public boolean isFile() {

return isFile;

}

public void setFile(boolean isFile) {

this.isFile = isFile;

}

public List<String> getJars() {

return jars;

}

public void setJars(List<String> jars) {

this.jars = jars;

}

}

3,辅助类

package com;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

public class ReadJarFile {

List<String> jarList = new ArrayList<String>();

List<String> filesURL = new ArrayList<String>();

/**

  * 读取指定文件夹的文件

  *

  * @param jarFileName

  * 路径

  * @param strings

  * 后缀

  */

public ReadJarFile(String jarFileName, String[] strings) {

File f = new File(jarFileName);

File[] fl = f.listFiles();

for (File file : fl) {

for (String str : strings) {

if (file.getName().endsWith(str)) {

jarList.add(file.getName());

String name=file.toURI().toString();

filesURL.add(name);

  }

  }

  }

}

public List<String> getJarList() {

return jarList;

}

public void setJarList(List<String> jarList) {

this.jarList = jarList;

}

public List<String> getFilesURL() {

return filesURL;

}

public void setFilesURL(List<String> filesURL) {

this.filesURL = filesURL;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: