集册 Java实例教程 通过包名获取类

通过包名获取类

欢马劈雪     最近更新时间:2020-01-02 10:19:05

590
通过包名获取类
/**来 自 nowjava.com - 时  代  Java**/

//package com.nowjava;

import java.io.File;

import java.io.IOException;

import java.net.URL;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.List;


public class Main {

    public static void main(String[] argv) throws Exception {

        String packageName = "nowjava.com";

        System.out.println(getClasses(packageName));

    }


    @SuppressWarnings("rawtypes")

    public static ArrayList<Class> getClasses(String packageName)

            throws ClassNotFoundException, IOException {

        ClassLoader classLoader = Thread.currentThread()

                .getContextClassLoader();

        assert classLoader != null;

        String path = packageName.replace('.', '/');/** 来自 时 代 J a v a - N o w J a v a . c o m**/

        Enumeration<URL> resources = classLoader.getResources(path);

        List<File> dirs = new ArrayList<File>();

        while (resources.hasMoreElements()) {

            URL resource = resources.nextElement();

            dirs.add(new File(resource.getFile()));

        }

        ArrayList<Class> classes = new ArrayList<Class>();

        for (File directory : dirs) {

            classes.addAll(findClasses(directory, packageName));

        }

        return classes;

    }


    @SuppressWarnings("rawtypes")

    public static List<Class> findClasses(File directory, String packageName)

            throws ClassNotFoundException {

        List<Class> classes = new ArrayList<Class>();

        if (!directory.exists()) {

            return classes;

        }

        File[] files = directory.listFiles();

        for (File file : files) {

            if (file.isDirectory()) {

                assert !file.getName().contains(".");

                classes.addAll(findClasse
展开阅读全文