/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.util; import net.sourceforge.pmd.RuleSetNotFoundException; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.net.URL; public class ResourceLoader { // Single static method, so we shouldn't allow an instance to be created private ResourceLoader() { } /** * * Method to find a file, first by finding it as a file * (either by the absolute or relative path), then as * a URL, and then finally seeing if it is on the classpath. * */ public static InputStream loadResourceAsStream(String name) throws RuleSetNotFoundException { InputStream stream = ResourceLoader.loadResourceAsStream(name, new ResourceLoader().getClass().getClassLoader()); if (stream == null) { throw new RuleSetNotFoundException("Can't find resource " + name + ". Make sure the resource is a valid file or URL or is on the CLASSPATH"); } return stream; } /** * * Uses the ClassLoader passed in to attempt to load the * resource if it's not a File or a URL * */ public static InputStream loadResourceAsStream(String name, ClassLoader loader) throws RuleSetNotFoundException { File file = new File(name); if (file.exists()) { try { return new FileInputStream(file); } catch (FileNotFoundException e) { // if the file didn't exist, we wouldn't be here } } else { try { return new URL(name).openConnection().getInputStream(); } catch (Exception e) { return loader.getResourceAsStream(name); } } throw new RuleSetNotFoundException("Can't find resource " + name + ". Make sure the resource is a valid file or URL or is on the CLASSPATH"); } }