Чтение файла класса из произвольной директории файловой системы - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу загрузить файл .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. Какие есть варианты сделать экземпляр класса в этом случае?

...