scan Package Names By Jar - Java Reflection

Java examples for Reflection:Jar

Description

scan Package Names By Jar

Demo Code

/*/* ww  w.  jav  a2  s  .  c o  m*/
 * Copyright Bruce Liang (ldcsaa@gmail.com)
 *
 * Version   : JessMA 3.5.1
 * Author   : Bruce Liang
 * Website   : http://www.jessma.org
 * Project   : http://www.oschina.net/p/portal-basic
 * Blog      : http://www.cnblogs.com/ldcsaa
 * WeiBo   : http://weibo.com/u/1402935851
 * QQ Group   : 75375912
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.regex.Pattern;

public class Main{
    private static final char PACKAGE_SEP_CHAR = '.';
    private static final char PATH_SEP_CHAR = '/';
    private static final String PATH_SEP_STR = "/";
    
    public static final void scanPackageNamesByJar(URL url,
            String basePackagePath, Set<String> names) {
        scanPackageNamesByJar(url, basePackagePath, null, names);
    }
    
    public static final void scanPackageNamesByJar(URL url,
            String basePackagePath, final PackageFilter filter,
            Set<String> names) {
        basePackagePath = adjustBasePackagePath(basePackagePath);

        try {
            JarFile jar = ((JarURLConnection) url.openConnection())
                    .getJarFile();
            Enumeration<JarEntry> entries = jar.entries();

            while (entries.hasMoreElements()) {
                JarEntry entry = entries.nextElement();
                String name = entry.getName();

                if (!entry.isDirectory()
                        || !name.startsWith(basePackagePath))
                    continue;

                if (name.endsWith(PATH_SEP_STR))
                    name = name.substring(0, name.length() - 1);

                if (name.equals(basePackagePath))
                    continue;

                String packageName = name.replace(PATH_SEP_CHAR,
                        PACKAGE_SEP_CHAR);

                if (filter == null || filter.accept(packageName))
                    names.add(packageName);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    private static final String adjustBasePackagePath(String basePackagePath) {
        basePackagePath = GeneralHelper.safeTrimString(basePackagePath)
                .replace(PACKAGE_SEP_CHAR, PATH_SEP_CHAR);

        if (basePackagePath.startsWith(PATH_SEP_STR))
            basePackagePath = basePackagePath.substring(1,
                    basePackagePath.length());

        if (basePackagePath.endsWith(PATH_SEP_STR))
            basePackagePath = basePackagePath.substring(0,
                    basePackagePath.length() - 1);

        return basePackagePath;
    }
}

Related Tutorials