应用程序有几个类路径(其中一些是在运行时添加的)。我想读取一个文件,它存在于两个不同的位置。根据不同的情况,我必须加载特定的文件。所以,我在考虑优先考虑类路径。但是,我不知道如何才能实现?
您可以使用类加载器从类路径读取任何文件
ExampleClass.class.getResourceAsStream("/path/to/file/inside/class.path");
如果资源在类加载器中多次存在,则将获取第一个遇到的资源。
ClassLoader对象允许您获取映射到相同资源路径的所有资源的列表
Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources("/path/to/file/inside/class.path");
url应该使您能够找出文件来自哪个jar
注意,使用Java服务特性会更健壮:实现一个接口来加载同样返回优先级的资源
公共接口Loader {InputStream getResource(字符串名称);int优先();}
然后使用ServiceLoader类加载加载资源的服务,根据实现返回的优先级编号对它们进行排序,然后在它们上按顺序运行getResource,直到找到资源。