我有一个分析包的各个方面的文件DA。 (由要分析的文件组成的文件夹的名称始终与包名称相同)
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.*;
import java.lang.reflect.*;
public class DA {
ArrayList<Class> classes;
int numberOfClasses;
String packageName;
public static void main(String[] args) throws IOException, ClassNotFoundException {
DA fl = new DA();
fl.loadPackage(args[0]);
fl.table();
}
public void loadPackage(String path) throws IOException, ClassNotFoundException {
Set<Class> set = new HashSet<Class>();
System.out.println("Gathering class files in " + path);
FilenameFilter classFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".class");
}
};
String className;
File f = new File(path); // the directory, really!
int n = 0;
for (File file : f.listFiles(classFilter)){
System.out.println(file.getName());
this.packageName = f.getName().toLowerCase();
className = file.getName().substring(0, file.getName().length()-6);
System.out.println(packageName + "." +className);
Class<?> cl = Class.forName(packageName + "." +className);
set.add(cl);
n++;
}
this.classes = new ArrayList<Class>(set);
this.numberOfClasses = n;
}
为了测试,我正在设置DA.jar的类路径,并使用一个demo.java文件,该文件包含一个名为&#34; demo&#34;的包。包中有A,B,C,D,E和F类。
这些是我在命令行中所做的事情,我得到了正确的类名&#34; demo.A&#34;这确实是合格的班级名称。
Demo.java
package demo;
class A {
public void meth1() {
System.out.println("calling " + getClass() + ".meth1");
}
public void meth2() {
System.out.println("calling " + getClass() + ".meth2");
}
}
class B extends A {
public void meth1() {
System.out.println("calling " + getClass() + ".meth1");
}
public void meth2() {
System.out.println("calling " + getClass() + ".meth2");
}
}
class C extends B {
public void meth1() {
System.out.println("calling " + getClass() + ".meth1");
}
public void meth2() {
System.out.println("calling " + getClass() + ".meth2");
}
public void meth3() {
System.out.println("calling " + getClass() + ".meth3");
}
public void meth4() {
System.out.println("calling " + getClass() + ".meth4");
}
}
class D {
private B b = new B();
public void meth1() {
System.out.println("calling " + getClass() + ".meth1");
}
}
class E {
public void meth1(D d, A a) {
System.out.println("calling " + getClass() + ".meth1");
}
public void meth2() {
System.out.println("calling " + getClass() + ".meth2");
}
}
class F {
private D d = new D();
public void meth1(E e) {
System.out.println("calling " + getClass() + ".meth1");
}
public void meth2() {
System.out.println("calling " + getClass() + ".meth2");
}
}
public class Demo {
public static void main(String[] args) {
A a = new A();
a.meth1();
a.meth2();
B b = new B();
b.meth1();
b.meth2();
// etc.
}
}
我之前通过eclipse运行这个程序。我有一个名为&#34; Demo&#34;我在Run Configuration中添加了类路径。我还通过运行配置中的Argument将参数提供给由Demo.java和所有.class文件组成的文件夹。原因可能是我的.class文件和Demo.java位于不同的地址中? (eclipse项目的src文件夹中的demo.java。以及桌面\ demo中的所有.class和demo.java的副本)