Gets all Class files from a JarFile - Java Reflection

Java examples for Reflection:Jar

Description

Gets all Class files from a JarFile

Demo Code

/*//from   www.  j a  v a  2s. c  o m
 * This file is part of VIUtils.
 *
 * Copyright ? 2012-2015 Visual Illusions Entertainment
 *
 * VIUtils is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this library.
 * If not, see http://www.gnu.org/licenses/lgpl.html.
 */
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.security.CodeSource;
import java.security.cert.Certificate;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import static net.visualillusionsent.utils.Verify.notEmpty;
import static net.visualillusionsent.utils.Verify.notNull;

public class Main{
    /**
     * Gets all {@link Class} files from a {@link JarFile}
     *
     * @param jarFile
     *         the {@link JarFile} to get classes from
     *
     * @return {@link Class} array
     *
     * @throws java.lang.ClassNotFoundException
     *         if the jar doesn't appear on the class-path and subsequently unable to load/find classes
     * @throws java.lang.NullPointerException
     *         if {@code jarFile} is null
     */
    public static Class[] getAllClasses(JarFile jarFile)
            throws ClassNotFoundException {
        notNull(jarFile, "JarFile jarFile");

        ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
        Enumeration<JarEntry> entries = jarFile.entries();
        while (entries.hasMoreElements()) {
            JarEntry entry = entries.nextElement();
            String entName = entry.getName().replace("/", ".");
            if (entName.endsWith(".class")) {
                Class<?> cls = Class.forName(entName.substring(0,
                        entName.length() - 6));
                classes.add(cls);
            }
        }
        return classes.toArray(new Class[classes.size()]);
    }
}

Related Tutorials