我正在學習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