集册 Java实例教程 按Jar扫描软件包名称

按Jar扫描软件包名称

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

482
按Jar扫描软件包名称

/*

 * 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;
/** from 
nowjava - 时代Java**/

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 = '/';// 来自 NowJava.com - 时  代  Java

    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 
展开阅读全文