【发布时间】:2011-12-29 12:42:32
【问题描述】:
我有这个非常特殊的需求,其中一个文件是从类路径加载的,并且在另一个需要它的绝对路径的模块中使用相同的文件。通过类路径加载的文件的绝对路径有哪些可能的推导方式?
【问题讨论】:
标签: java
我有这个非常特殊的需求,其中一个文件是从类路径加载的,并且在另一个需要它的绝对路径的模块中使用相同的文件。通过类路径加载的文件的绝对路径有哪些可能的推导方式?
【问题讨论】:
标签: java
使用 ClassLoader.getResource() 而不是 ClassLoader.getResourceAsStream() 来获取 URL。根据定义,它将永远是绝对的。
然后您可以在 URL 上使用openConnection() 来加载内容。我经常使用这个代码:
public ... loadResource(String resource) {
URL url = getClass().getClassLoader().getResource(resource);
if (url == null) {
throw new IllegalArgumentException("Unable to find " + resource + " on classpath);
}
log.debug("Loading {}", url); // Will print a file: or jar:file: URL with absolute path
try(InputStream in = resource.openConnection()) {
...
}
}
【讨论】:
getResource() 方法是哪个类并不是那么明显,应该考虑添加它或指向 javadoc,正如它在这个如果您使用类或类加载器中的 getResource() 进行评论,它的行为可能会有所不同:stackoverflow.com/questions/2593154/…
【讨论】:
SomeClassOfYours.getClass().getClassLoader().getResource