puzhibing
2026-04-10 4f8b07e136c39cc22fbadfd2c869578bb9827a18
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/ResourceUtil.java
@@ -0,0 +1,82 @@
package com.xiaopeng.vehicleConvoy.util;
import java.io.*;
import java.lang.reflect.Method;
import java.net.URL;
/**
 * 资源工具类
 * @author binghuoliu
 *
 */
public class ResourceUtil {
   /**
    * 读取classpath下的文件<br>
    * 读取classpath下的文件 一般用于读取classpath下的配置文件,注意读取的配置文件路径是相对传入参数clazz的load入路径. 例:<br>
    * ClassTest c1;//假设c1是从/usr/local/classpath/ 载入<br>
    * ClassTest c2;//假设c2是从/home/classpath/ 载入<br>
    * ............<br>
    * loadConfigFile("a.xml",c1.class);//从/usr/local/classpath1/下寻找a.xml<br>
    * loadConfigFile("a.xml",c2.class);//从/home/classpath/下寻找a.xml<br>
    * @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) {
         }
      }
   }
}