我正在学习Java中的反思。我开始知道我们可以使用反射轻松地提取类文件中使用的方法。类未找到异常
我有一个java类文件,它有n个方法。
测试文件指的是java类从那里我想读使用的方法和testSample是从哪儿我访问TESTFILE类方法
public class testSample
{
public static void main(String args[]) throws ClassNotFoundException
{
File filename = new File(
"C:/ProgramData/Eclipse/Projects_3.7.1/Testfile.java");
String filen = filename.toString();
if (filen.endsWith(".java"))
{
String actfilename = StringUtils.substringBefore(filen, ".java");
Class classname = Class.forName(actfilename);
Method[] method = classname.getMethods();
for (Method methods : method)
{
System.out.println("Method name \r\n" + methods.getName());
Class[] parameters = methods.getParameterTypes();
for (Class parametername : parameters)
{
System.out.println("parameters name \r\n"
+ parametername.getName());
}
}
}
}
}
请大家帮我出这个我的课。
我越来越异常错误如下
Exception in thread "main" java.lang.ClassNotFoundException: testFile
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.TestSample1.retrievemethods(TestSample1.java:58)
at com.TestSample1.filetraverse(TestSample1.java:43)
at com.TestSample1.filetraverse(TestSample1.java:45)
at com.TestSample1.main(TestSample1.java:22)
TESTFILE
非常感谢您的宝贵建议。但我仍然没有摆脱它。
让我说清楚。
static File appname="C:/programdata/eclipse/appname";
public static void main(String[] args) throws ClassNotFoundException
{
TestSample1 tf1=new TestSample1();
tf1.filetraverse(appname);
}
public void filetraverse(File appname) throws ClassNotFoundException
{
if (appname.isDirectory())
{
File[] files = appname.listFiles();
for (File filename : files)
{
String finame=filename.getName().toLowerCase();
if(finame.endsWith("java"))
{
retrievemethods(filename,reflection);
}
filetraverse(filename);
}
}
}
public void retrievemethods(File filename,File reflection) throws
ClassNotFoundException
{
String classna=filename.toString();
String classnam=StringUtils.substringBetween(classna, "/appname/", ".java");
Class reflectclass = Class.forName(classnam);
Method[] method=reflectclass.getMethods();
for (Method methods : method)
{
System.out.println("Method name \r\n"+methods.getName());
Class[] parameters=methods.getParameterTypes();
for (Class parametername : parameters)
{
System.out.println("parameters name \r\n"+parametername.getName());
}
}
}
和我得到的错误是类未找到异常。
是什么内容' actfilename' – Jens 2015-02-07 10:49:46
“我开始知道我们可以很容易地提取类文件中使用的方法”'foo.java'不是类文件,'foo.class'是。此外,您还需要具有要在classpath中使用的类的包的位置,或者使用ClassLoader加载它。 – Pshemo 2015-02-07 10:51:36