I have a Java webapp WAR file that depends on multiple jars in it\'s WEB-INF\\lib directory. One of these JARS needs to load some config files by doing class.getClassL
Assuming you're not making the rookie mistake of putting QueryLoader
in a different JAR, the only problem I can see is that you're using File.separator
yet appear (from your use of \
) to be using Windows. When using getResourceAsStream
, the separator is always a forward slash (/
) just as if you're using a URL.
If I change that I get this:
QueryLoader.class.getClassLoader().getResourceAsStream(
"/com/companyname/queries/" + fileName)
Of course, if QueryLoader
is in the com.companyname.queries
package (along with the queries themselves) then you should simply do this:
QueryLoader.class.getResourceAsStream(fileName)
Simple as that. (It's documented that Class.getResourceAsStream qualifies relative filenames with the name of the containing package.)
It should work, but you need to take care that you use the correct class loader.
Managed to get it to work by using Spring's resource loader instead
public String loadQuery(String fileName) {
final String newline = "\n";
ApplicationContext ctx = new ClassPathXmlApplicationContext();
Resource res = ctx.getResource("classpath:/com/msi/queries/" + fileName);
BufferedReader reader;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(res.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append(newline);
}
} catch (IOException e) {
LOGGER.error(e);
}
return sb.toString();
}