读取驻留在从另一个jar文件调用的jar中的文件

时间:2012-10-17 09:49:39

标签: java xml file jar classloader

我有两个jar文件(让我们说jar1和jar2)。 jar2中有一个xml文件。我想读取xml文件。

public void readXmlFile(){
InputStream resourceAsStream = MainFile.class.getResourceAsStream("/test.xml");
}

但现在我正在使用

在jar1中调用此函数
File file = new File(jar2);
URL url = file.toURL();
URL[] urls = new URL[] { url };
ClassLoader cl = new URLClassLoader(urls);
Class<?> compositeClass = cl.loadClass(XmlFileReader);
Method declaredMethod = compositeClass.getDeclaredMethod("readXmlFile");
Object newInstance = compositeClass.newInstance();
declaredMethod.invoke(newInstance); 

现在我收到FileNotFoundException,因为正在jar1中搜索xml文件而不是jar2,我不知道为什么会这样。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

我发现只有解决方案是使用我的jar1中的System.setProperty(key,value)设置一个System属性作为包含我的两个jar的文件夹的路径。然后我在jar2中读回系统属性,然后像这样修改我的readXml方法

public void readXmlFile(){ 
JarFile jarFile = new JarFile(pathToJar2);
JarEntry entry = jarFile.getJarEntry("/test.xml");
InputStream inputStream = jarFile.getInputStream(entry);}