【发布时间】:2015-07-20 20:42:03
【问题描述】:
我有一个代码可以加载文件夹中具有相同包名 (second) 的所有类。
如何更改它以将所有类加载到带有 deference 包的文件夹中(不在 second 中)(我们不知道包名称)
int classCounter = 0;
File folderAdded = new File("..//940424//second");
File [] classFileAdded = folderAdded.listFiles();
String [] addedClassName = new String [classFileAdded.length];
List<Operations> newOp = new ArrayList<Operations>();
Operations newOpTemp = null;
for(int i = 0; classCounter < classFileAdded.length; classCounter++){
addedClassName [classCounter] = classFileAdded[classCounter].getAbsolutePath().substring(classFileAdded[classCounter].getAbsolutePath().lastIndexOf("\\")+1);
addedClassName [classCounter] = addedClassName[classCounter].substring(0,(addedClassName[classCounter].lastIndexOf(".")));
addedClassName [classCounter] = "second." + addedClassName[classCounter];
Class addedClass = Class.forName(addedClassName[classCounter]);
newOpTemp = (Operations)addedClass.newInstance();
if (newOpTemp instanceof Operations){
newOp.add( i, newOpTemp);
i++;
}
【问题讨论】:
-
你不需要知道包,只需要给出父文件夹,然后你可以递归地遍历文件夹并过滤所有文件名包含java的文件。所以你会得到所有的文件
-
我试过了,当我们在不同的包中有一些类(不是
second)时,在运行时发生异常(NoClassDefFoundError: second/ClassInThirdPackage(wrong name: third/ClassInThirdPackage))!
标签: java reflection classloader