Я хочу загрузить файл .class, вставленный в случайный каталог.
public static void main(...) throws Exception
{
final File folder = new File("/var/tools");
processAnnotatedFiles(listLocalFilesAndDirsAllLevels(folder));
}
public void processAnnotatedFiles(List<File> list) throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
out.println("Directory files size " + list.size());
for(int i=0; i<list.size(); i++) {
out.println("File " + list.get(i).getName());
File file = list.get(i);
// Create a new JavaClassLoader
ClassLoader classLoader = this.getClass().getClassLoader();
String cname = file.getName().substring(0, file.getName().length()-6); // strip off ".class"
// Load the target class using its binary name
Class loadedMyClass = classLoader.loadClass(cname);
out.println("Loaded class name: " + loadedMyClass.getName());
// Create a new instance from the loaded class
Constructor constructor = loadedMyClass.getConstructor();
Object myClassObject = constructor.newInstance();
}
}
public List<File> listLocalFilesAndDirsAllLevels(File baseDir) {
List<File> collectedFilesAndDirs = new ArrayList<>();
Deque<File> remainingDirs = new ArrayDeque<>();
if(baseDir.exists()) {
remainingDirs.add(baseDir);
while(!remainingDirs.isEmpty()) {
File dir = remainingDirs.removeLast();
List<File> filesInDir = Arrays.asList(dir.listFiles());
for(File fileOrDir : filesInDir) {
// We need to process only .class files
if(fileOrDir.getName().endsWith(".class")){
collectedFilesAndDirs.add(fileOrDir);
if(fileOrDir.isDirectory()) {
remainingDirs.add(fileOrDir);
}
}
}
}
}
return collectedFilesAndDirs;
}
Но когда я запускаю код, я получаю java.lang.ClassNotFoundException: CompositeOrder
В моем случае я не знать, что входит в класс Java. Какие есть варианты сделать экземпляр класса в этом случае?