如何从其他项目中存在的类文件中获取输入流

时间:2013-09-22 07:27:03

标签: java inputstream aop javassist getresource

我正在尝试从其他项目的类文件中获取输入流。

我正在使用eclipse。输出文件夹是:

mycurrentproject/WebContent/WEB-INF/classes

导出库文件夹是:

mycurrentproject/WebContent/WEB-INF/lib

当我打印“java.class.path”时,我得到了这个:

D:\apache-tomcat-7.0.42\bin\bootstrap.jar;D:\apache-tomcat-7.0.42\bin\tomcat-juli.jar;

我的WINDOWS系统CLASS PATH的环境变量是:

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;D:\work\workspace\myjar

我在代码action中获取资源流的代码是:

classfilePath = "/cc/Person.class";
InputStream isInputStream = ModifyMethodTest.class.getResourceAsStream(classfilePath);

action在“mycurrentproject / WebContent / WEB-INF / classes”中输出。 action.jar导出到“mycurrentproject / WebContent / WEB-INF / lib”中。

当“mycurrentproject / WebContent / WEB-INF / classes”中的cc/Person.class时,我得到了正确的结果。何时在“mycurrentproject / WebContent / WEB-INF / lib”或“D:\ work \ workspace \ myjar”中cc/Person.classisInputStream为空。我想在另一个项目中将输入流形成一个类文件。类文件可能位于目标项目文件夹的文件夹或jar文件中。该项目中应该有许多类或jar文件。怎么做?就目前而言,简单来说,我测试了我的想法,将cc/Person.class放在“D:\ work \ workspace \ myjar”中。但它也失败了。任何人都有类似的经历或建议吗?感谢。

修改

classfilePath ="file:D:/work/workspace/myjar/cc/Person.class"; 
URL[] urls = new URL[] { new URL(classfilePath) }; 
URLClassLoader ucl = new URLClassLoader(urls); 
InputStream isInputStream = ucl.getResourceAsStream(classfilePath);

这里isInputStream仍然为null。 getResourceAsStream()的参数是String name。可能是什么?像相对路径的东西?有没有参考?

EDIT2:

它适用于以下代码:

String Path1 = "file:D:/";
String Path2 = "work/workspace/myjar/cc/Person.class";

URL[] urls = new URL[] { new URL(Path1) }; 
URLClassLoader ucl = new URLClassLoader(urls); 
InputStream isInputStream = ucl.getResourceAsStream(Path2);

1 个答案:

答案 0 :(得分:1)

使用URLClassLoader。建立后,请致电:

getResourceAsStream("/work/workspace/myjar/cc/Person.class")

InputStream