Java Jar File Find findJar(Class my_class)

Here you can find the source of findJar(Class my_class)

Description

find Jar

License

Apache License

Declaration

public static String findJar(Class<?> my_class) 

Method Source Code

//package com.java2s;
/*//from   w w w.j av  a 2s.  c  o  m
 *
 *  * Copyright 2015 Skymind,Inc.
 *  *
 *  *    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.IOException;

import java.net.URL;
import java.net.URLDecoder;

import java.util.Enumeration;

public class Main {
    public static String findJar(Class<?> my_class) {
        ClassLoader loader = my_class.getClassLoader();
        String class_file = my_class.getName().replaceAll("\\.", "/")
                + ".class";
        try {
            for (Enumeration<?> itr = loader.getResources(class_file); itr
                    .hasMoreElements();) {
                URL url = (URL) itr.nextElement();
                if ("jar".equals(url.getProtocol())) {
                    String toReturn = url.getPath();
                    if (toReturn.startsWith("file:")) {
                        toReturn = toReturn.substring("file:".length());
                    }
                    //URLDecoder is a misnamed class, since it actually decodes
                    // x-www-form-urlencoded MIME type rather than actual
                    // URL encoding (which the file path has). Therefore it would
                    // decode +s to ' 's which is incorrect (spaces are actually
                    // either unencoded or encoded as "%20"). Replace +s first, so
                    // that they are kept sacred during the decoding process.
                    toReturn = toReturn.replaceAll("\\+", "%2B");
                    toReturn = URLDecoder.decode(toReturn, "UTF-8");
                    return toReturn.replaceAll("!.*$", "");
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return null;
    }
}

Related

  1. findContainingJar(Class clazz)
  2. findContainingJar(Class clazz)
  3. findContainingJar(Class myClass, Map packagedClasses)
  4. findContainingJar(ClassLoader classLoader, String resourceName)
  5. findJar(Class klass)
  6. findJar(File dir)
  7. findJar(String nameRegexp)
  8. findJarContaining(Class c)
  9. findJarEntry(String entryName, JarInputStream jarFile)