package com.xiaopeng.trafficControl.util; import java.io.*; import java.lang.reflect.Method; import java.net.URL; /** * 资源工具类 * @author binghuoliu * */ public class ResourceUtil { /** * 读取classpath下的文件
* 读取classpath下的文件 一般用于读取classpath下的配置文件,注意读取的配置文件路径是相对传入参数clazz的load入路径. 例:
* ClassTest c1;//假设c1是从/usr/local/classpath/ 载入
* ClassTest c2;//假设c2是从/home/classpath/ 载入
* ............
* loadConfigFile("a.xml",c1.class);//从/usr/local/classpath1/下寻找a.xml
* loadConfigFile("a.xml",c2.class);//从/home/classpath/下寻找a.xml
* @param resource 资源路径 * @param clazz * @return InputStream 文件的inputstram,如果找不到则返回null */ @SuppressWarnings("unchecked") public static InputStream loadConfigFile(String resource, Class clazz) { ClassLoader classLoader = null; try { Method method = Thread.class.getMethod("getContextClassLoader"); classLoader = (ClassLoader) method.invoke(Thread.currentThread()); } catch (Exception e) { throw new RuntimeException("loadConfigFile error: ", e); } if (classLoader == null) { classLoader = clazz.getClassLoader(); } try { if (classLoader != null) { URL url = classLoader.getResource(resource); if (url == null) { System.out.println("Can not find resource:" + resource); return null; } if (url.toString().startsWith("jar:file:")) { System.out.println("Get resource \"" + resource + "\" from jar:\t" + url.toString()); return clazz.getResourceAsStream(resource.startsWith("/") ? resource : "/" + resource); } else { System.out.println("Get resource \"" + resource + "\" from:\t" + url.toString()); return new FileInputStream(new File(url.toURI())); } } } catch (Exception e) { throw new RuntimeException("loadConfigFile error: ", e); } return null; } /** * 释放资源(有异常抛出) * @param closeable * @throws IOException */ public static void close(Closeable closeable) throws IOException { if (closeable != null) { closeable.close(); } } /** * 以优雅的形式释放资源(内部吃掉了异常) * @param closeable */ public static void closeGracefully(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (IOException e) { } } } }