集册 Java实例教程 通过当前线程的上下文类加载器检索资源作为输入流,如果找不到,则通过按其规范的顺序通过可选指定的类的类加载器检索资源,如果找不到,则从ClassLoaderHelper的类加载器检索为最后一招。

通过当前线程的上下文类加载器检索资源作为输入流,如果找不到,则通过按其规范的顺序通过可选指定的类的类加载器检索资源,如果找不到,则从ClassLoaderHelper的类加载器检索为最后一招。

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

433
通过当前线程的上下文类加载器检索资源作为输入流,如果找不到,则通过按其规范的顺序通过可选指定的类的类加载器检索资源,如果找不到,则从ClassLoaderHelper的类加载器检索为最后一招。

/*

 * Copyright 2011-2013 Amazon Technologies, 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://aws.amazon.com/apache2.0

 *

 * This file 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;/** 来 自 时代Java**/

import java.io.InputStream;

import java.net.URL;


public class Main{

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

        String resource = "nowjava.com";

        Class classes = String.class;

        System.out.println(getResourceAsStream(resource,classes));

    }

    /**

     * Retrieves the resource as an input stream via

     * the context class loader of the current thread, and if not found, via the

     * class loaders of the optionally specified classes in the order of their

     * specification, and if not found, from the class loader of

     * {@link ClassLoaderHelper} as the last resort.

     * 

     * @param resource

     *            resource to be loaded

     * @param classes

     *            class loader providers

     * @return the resource loaded as an input stream or null if not found.

     */

    public static InputStream getResourceAsStream(String resource,

            Class<?>... classes) {

        return getResourceAsStream(resource, false, classes);

    }

    /**

     * If classesFirst is false, retrieves the resource as an input stream via

     * the context class loader of the current thread, and if not found, via the

     * class loaders of the optionally specified classes in the order of their

     * specification, and if not found, from the class loader of

     * {@link ClassLoaderHelper} as the last resort.

     * <p>

     * If classesFirst is true, retrieves the resource as an input stream via

     * the optionally specified classes in the order of their specification, and

     * if not found, via the context class loader of the current thread, and if

     * not found, from the class loader of {@link ClassLoaderHelper} as the last

     * resort.

     * 

     * @param resource

     *            resource to be loaded

     * @param classesFirst

     *            true if the class loaders of the optionally specified classes

     *            take precedence over the context class loader of the current

     *            thread; false if the opposite is true.

     * @param classes

     *            class loader providers

     * @return the resource loaded as an input stream or null if not found.

     */

    public static InputStream getResourceAsStream(String resource,

            boolean classesFirst, Class<?>... classes) {

        URL url = getResource(resource, classesFirst, classes);

        try {
        /**
         from
        * 时   代     Java  公  众  号 - nowjava.com 
        **/

            return url != null ? url.openStream() : null;

        } catch (IOException e) {

            return null;

        }

    }

    /**

     * Retrieves the resource via the context class loader of the current

     * thread, and if not found, via the class loaders of the optionally

     * specified classes in the order of their specification, and if not

     * found, from the class loader of {@link ClassLoaderHelper} as the last

     * resort.

     * 

     * @param resource

     *            resource to be loaded

     * @param classes class loader providers

     * @return the resource loaded as an URL or null if not found.

     */

    public static URL getResource(String resource, Class<?>... classes) {

        return getResource(resource, false, classes);

    }

    /**

     * If classesFirst is false, retrieves the resource via the context class

     * loader of the current thread, and if not found, via the class loaders of

     * the optionally specified classes in the order of their specification, and

     * if not found, from the class loader of {@link ClassLoaderHelper} as the

     * last resort.

     * <p>

     * If classesFirst is true, retrieves the resource via the optionally

     * specified classes in the order of their specification, and if not found,

     * via the context class loader of the current thread, and if not found,

     * from the class loader of {@link ClassLoaderHelper} as the last resort.

     * 

     * @param resource

     *            resource to be loaded

     * @param classesFirst

     *            true if the class loaders of the optionally specified classes

     *            take precedence over the context class loader of the current

     *            thread; false if the opposite is true.

     * @param classes

     *            class loader providers

     * @return the resource loaded as an URL or null if not found.

     */

    public static URL getResource(String resource, boolean classesFirst,

            Class<?>... classes) {

        URL url;

        if (classesFirst) {

            url = getResourceViaClasses(resource, classes);

            if (url == null) {

                url = getResourceViaContext(resource);

            }

        } else {

            url = getResourceViaContext(resource);

            
展开阅读全文