• Java之资源文件读取


    ClassLoaderWrapper.java
    package org.utils.resource;
    
    import java.io.InputStream;
    import java.net.URL;
    
    class ClassLoaderWrapper {
    	
    	ClassLoader defaultClassLoader;
    	ClassLoader systemClassLoader;
    	
    	ClassLoaderWrapper() {
    		try {
    			systemClassLoader = ClassLoader.getSystemClassLoader();
    		}
    		catch (SecurityException ignored) {}
    	}
    	
    	public URL getResourceAsURL(String resource) {
    		return getResourceAsURL(resource, getClassLoaders(null));
    	}
    	
    	public URL getResourceAsURL(String resource, ClassLoader classLoader) {
    		return getResourceAsURL(resource, getClassLoaders(classLoader));
    	}
    	
    	public InputStream getResourceAsStream(String resource) {
    		return getResourceAsStream(resource, getClassLoaders(null));
    	}
    	
    	public InputStream getResourceAsStream(String resource, ClassLoader classLoader) {
    		return getResourceAsStream(resource, getClassLoaders(classLoader));
    	}
    	
    	public Class<?> classForName(String name) throws ClassNotFoundException {
    		return classForName(name, getClassLoaders(null));
    	}
    	
    	public Class<?> classForName(String name, ClassLoader classLoader) throws ClassNotFoundException {
    		return classForName(name, getClassLoaders(classLoader));
    	}
    	
    	InputStream getResourceAsStream(String resource, ClassLoader[] classLoaderArray) {
    		for (ClassLoader classLoader : classLoaderArray) {
    			if (null != classLoader) {
    				InputStream returnValue = classLoader.getResourceAsStream(resource);
    				if (null == returnValue) returnValue = classLoader.getResourceAsStream("/" + resource);
    				if (null != returnValue) return returnValue;
    			}
    		}
    		
    		return null;
    	}
    	
    	URL getResourceAsURL(String resource, ClassLoader[] classLoaderArray) {
    		URL url;
    		
    		for (ClassLoader classLoader : classLoaderArray) {
    			if (null != classLoader) {
    				url = classLoader.getResource(resource);
    				if (null == url) url = classLoader.getResource("/" + resource);
    				if (null != url) return url;
    			}
    		}
    		
    		return null;
    	}
    	
    	Class<?> classForName(String name, ClassLoader[] classLoaderArray) throws ClassNotFoundException {
    		for (ClassLoader classLoader : classLoaderArray) {
    			if (null != classLoader) {
    				try {
    					Class<?> clazz = Class.forName(name, true, classLoader);
    					if (null != clazz) return clazz;
    				}
    				catch (ClassNotFoundException e) {}
    			}
    		}
    		
    		throw new ClassNotFoundException("Cannot find class: " + name);
    	}
    	
    	ClassLoader[] getClassLoaders(ClassLoader classLoader) {
    		return new ClassLoader[] {
    				classLoader,
    				defaultClassLoader,
    				Thread.currentThread().getContextClassLoader(),
    				getClass().getClassLoader(),
    				systemClassLoader
    		};
    	}
    }
    

      

    ResourcesUtils.java
    package org.utils.resource;
    
    import java.io.*;
    import java.net.URISyntaxException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.nio.charset.Charset;
    import java.util.Properties;
    
    public class ResourcesUtils {
    	
    	private static ClassLoaderWrapper classLoaderWrapper = new ClassLoaderWrapper();
    	
    	private static Charset charset;
    	
    	public static ClassLoader getDefaultClassLoader() {
    		return classLoaderWrapper.defaultClassLoader;
    	}
    	
    	public static void setDefaultClassLoader(ClassLoader defaultClassLoader) {
    		classLoaderWrapper.defaultClassLoader = defaultClassLoader;
    	}
    	
    	public static Charset getCharset() {
    		return charset;
    	}
    	
    	public static void setCharset(Charset charset) {
    		ResourcesUtils.charset = charset;
    	}
    	
    	public static URL getResourceURL(String resource) throws IOException {
    		return getResourceURL(null, resource);
    	}
    	
    	public static URL getResourceURL(ClassLoader loader, String resource) throws IOException {
    		URL url = classLoaderWrapper.getResourceAsURL(resource, loader);
    		if (url == null) throw new IOException("Could not find resource " + resource);
    		
    		return url;
    	}
    	
    	public static InputStream getResourceAsStream(String resource) throws IOException {
    		return getResourceAsStream(null, resource);
    	}
    	
    	public static InputStream getResourceAsStream(ClassLoader loader, String resource)
    			throws IOException {
    		InputStream in = classLoaderWrapper.getResourceAsStream(resource, loader);
    		if (in == null) throw new IOException("Could not find resource " + resource);
    		
    		return in;
    	}
    	
    	public static Properties getResourceAsProperties(String resource) throws IOException {
    		Properties props = new Properties();
    		InputStream in = getResourceAsStream(resource);
    		props.load(in);
    		in.close();
    		
    		return props;
    	}
    	
    	public static Properties getResourceAsProperties(ClassLoader loader, String resource)
    			throws IOException {
    		Properties props = new Properties();
    		InputStream in = getResourceAsStream(loader, resource);
    		props.load(in);
    		in.close();
    		
    		return props;
    	}
    	
    	public static Properties getResourceAsProperties(File file) throws IOException {
    		Properties props = new Properties();
    		if (!file.exists()) return null;
    		InputStream in = new FileInputStream(file);
    		props.load(in);
    		in.close();
    		
    		return props;
    	}
    	
    	public static Reader getResourceAsReader(String resource) throws IOException {
    		Reader reader;
    		if (charset == null) reader = new InputStreamReader(getResourceAsStream(resource));
    		else reader = new InputStreamReader(getResourceAsStream(resource), charset);
    		
    		return reader;
    	}
    	
    	public static Reader getResourceAsReader(ClassLoader loader, String resource) throws IOException {
    		Reader reader;
    		if (charset == null) reader = new InputStreamReader(getResourceAsStream(loader, resource));
    		else reader = new InputStreamReader(getResourceAsStream(loader, resource), charset);
    		
    		return reader;
    	}
    	
    	public static File getResourceAsFile(String resource) throws IOException, URISyntaxException {
    		return new File(getResourceURL(resource).toURI());
    	}
    	
    	public static File getResourceAsFile(ClassLoader loader, String resource) throws IOException
    			, URISyntaxException {
    		return new File(getResourceURL(loader, resource).toURI());
    	}
    	
    	public static InputStream getUrlAsStream(String urlString) throws IOException {
    		URL url = new URL(urlString);
    		URLConnection conn = url.openConnection();
    		
    		return conn.getInputStream();
    	}
    	
    	public static Reader getUrlAsReader(String urlString) throws IOException {
    		Reader reader;
    		if (charset == null) reader = new InputStreamReader(getUrlAsStream(urlString));
    		else reader = new InputStreamReader(getUrlAsStream(urlString), charset);
    		
    		return reader;
    	}
    	
    	public static Properties getUrlAsProperties(String urlString) throws IOException {
    		Properties props = new Properties();
    		InputStream in = getUrlAsStream(urlString);
    		props.load(in);
    		in.close();
    		
    		return props;
    	}
    	
    	public static Class<?> classForName(String className) throws ClassNotFoundException {
    		return classLoaderWrapper.classForName(className);
    	}
    }
    

      

  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/gongxr/p/7832489.html
Copyright © 2020-2023  润新知