在java中为classpath提供首选项

时间:2014-06-11 08:55:29

标签: java java-ee reflection

应用程序有几个类路径(其中一些在运行时添加)。我想读一个存在于两个不同位置的文件。根据情况我必须加载特定文件。所以,我正在考虑优先考虑类路径。但是,我不知道它是如何实现的?

2 个答案:

答案 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,直到找到资源。