返回信息流本人java菜鸟,在网上搜到下面的程序可以从指定的路径加载jar包。现在有一个加密的jar包(里面仅若干xml文件),我将它解密以后就不再写回到硬盘上了,而是保存到一个字节流里(所以不能直接使用下面的程序加载),那么该如何加载这个字节流里的资源呢?如果下面的程序稍作修改就能达到目的是最好了,谢谢!
/**
* created since 2011-3-8
* All rights reserved.
*/
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
/**
* 加载指定路径jar包工具类
* @author xiaochuan.zhang
* @version $Id: ClassLoaderUtil.java, v 0.1 2011-3-10 下午
*/
public final class ClassLoaderUtil {
/** URLClassLoader的addURL方法 */
private static Method addURL = initAddMethod();
/** 初始化方法 */
private static final Method initAddMethod() {
try {
Method add = URLClassLoader.class
.getDeclaredMethod("addURL", new Class[] { URL.class });
add.setAccessible(true);
return add;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static URLClassLoader system = (URLClassLoader) ClassLoader.getSystemClassLoader();
/**
* 循环遍历目录,找出所有的JAR包
*/
private static final void loopFiles(File file, List<File> files) {
if (file.isDirectory()) {
File[] tmps = file.listFiles();
for (File tmp : tmps) {
loopFiles(tmp, files);
}
} else {
if (file.getAbsolutePath().endsWith(".jar") || file.getAbsolutePath().endsWith(".zip")) {
files.add(file);
}
}
}
/**
* <pre>
* 加载JAR文件
* </pre>
*
* @param file
*/
public static final void loadJarFile(File file) {
try {
addURL.invoke(system, new Object[] { file.toURI().toURL() });
System.out.println("加载JAR包:" + file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* <pre>
* 从一个目录加载所有JAR文件
* </pre>
*
* @param path
*/
public static final void loadJarPath(String path) {
List<File> files = new ArrayList<File>();
File lib = new File(path);
loopFiles(lib, files);
for (File file : files) {
loadJarFile(file);
}
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #38142同步于 2015/1/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
在程序中加载jar包
disk
2015/1/15镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
你这个程序是把 jar 包里的东西加载到 classpath 里,跟加载没关系。
取的时候需要用 getResource() 方法。
来自「北邮人论坛手机版」
解密以后资源在内存里,用getResource获取不到吧
【 在 kayla 的大作中提到: 】
: 你这个程序是把 jar 包里的东西加载到 classpath 里,跟加载没关系。
: 取的时候需要用 getResource() 方法。
: 来自「北邮人论坛手机版」
哦,是我理解错了,sorry。
【 在 disk 的大作中提到: 】
: 解密以后资源在内存里,用getResource获取不到吧
来自「北邮人论坛手机版」