应用程序有几个类路径(其中一些在运行时添加)。我想读一个存在于两个不同位置的文件。根据情况我必须加载特定文件。所以,我正在考虑优先考虑类路径。但是,我不知道它是如何实现的?
答案 0 :(得分:0)
您可以使用classloader
从类路径中读取任何文件ExampleClass.class.getResourceAsStream("/path/to/file/inside/class.path");
如果资源在类加载器中多次存在,则将获取第一个遇到的资源。
答案 1 :(得分:0)
ClassLoader对象允许您将list of all resources映射到相同的资源路径
Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources("/path/to/file/inside/class.path");
url应该可以让你找出文件来自哪个jar
请注意,使用java服务功能会更健壮:实现一个接口来加载资源,这也是一个优先级
public interface Loader { InputStream getResource(String name); int priority(); }
然后使用ServiceLoader类加载服务加载资源,按实现返回的优先级编号对它们进行排序,然后按顺序对它们运行getResource,直到找到资源。