Use ClassLoader.getResource()
instead of ClassLoader.getResourceAsStream()
to get a URL. It will be, by definition, always absolute.
You can then use openConnection()
on the URL to load the content. I'm often using this code:
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()) {
...
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…