Список классов в подкаталоге пакета - PullRequest
2 голосов
/ 13 ноября 2010

Я не уверен, что здесь используется правильная терминология ... но если имя моего пакета настроено так:

com.example.fungame
    -ClassA
    -ClassB
    -com.example.fungame.sprite
        -ClassC
        -ClassD

Как программно получить массив (я предполагаю * 1004) всех классов в подкаталоге .sprite?

1 Ответ

0 голосов
/ 13 ноября 2010

Попробуйте этот метод:

public static Class[] getClasses(String pckgname) throws ClassNotFoundException {
    ArrayList classes=new ArrayList();
    File directory = null;
    try {
        directory = new File(Thread.currentThread().getContextClassLoader().getResource(pckgname.replace('.', '/')).getFile());
    } catch(NullPointerException x) {
        throw new ClassNotFoundException(pckgname + " does not appear to be a valid package");
    }   
    if (directory.exists()) {
        // Get the list of the files contained in the package
        String[] files = directory.list();
        for (int i = 0; i < files.length; i++) {
            // we are only interested in .class files
            if(files[i].endsWith(".class")) {
                // removes the .class extension
                try {
                    Class cl = Class.forName(pckgname + '.' + files[i].substring(0, files[i].length() - 6));
                    classes.add(cl);
                } catch (ClassNotFoundException ex) {
                }
            }
        }   
    } else {
        throw new ClassNotFoundException(pckgname + " does not appear to be a valid package");
    }
Class[] classesA = new Class[classes.size()];
classes.toArray(classesA);
return classesA;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...