通过当前线程的上下文类加载器检索资源作为输入流,如果找不到,则通过按其规范的顺序通过可选指定的类的类加载器检索资源,如果找不到,则从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);