View Javadoc

    1   /***
    2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
    3    */
    4   package net.sourceforge.pmd.util;
    5
    6   import net.sourceforge.pmd.RuleSetNotFoundException;
    7
    8   import java.io.File;
    9   import java.io.FileInputStream;
    10  import java.io.FileNotFoundException;
    11  import java.io.InputStream;
    12  import java.net.URL;
    13
    14  public class ResourceLoader {
    15
    16      // Only static methods, so we shouldn't allow an instance to be created
    17      private ResourceLoader() {
    18      }
    19
    20      /***
    21       * Method to find a file, first by finding it as a file
    22       * (either by the absolute or relative path), then as
    23       * a URL, and then finally seeing if it is on the classpath.
    24       */
    25      public static InputStream loadResourceAsStream(String name) throws RuleSetNotFoundException {
    26          InputStream stream = ResourceLoader.loadResourceAsStream(name, ResourceLoader.class.getClassLoader());
    27          if (stream == null) {
    28              throw new RuleSetNotFoundException("Can't find resource " + name + ". Make sure the resource is a valid file or URL or is on the CLASSPATH");
    29          }
    30          return stream;
    31      }
    32
    33      /***
    34       * Uses the ClassLoader passed in to attempt to load the
    35       * resource if it's not a File or a URL
    36       */
    37      public static InputStream loadResourceAsStream(String name, ClassLoader loader) throws RuleSetNotFoundException {
    38          File file = new File(name);
    39          if (file.exists()) {
    40              try {
    41                  return new FileInputStream(file);
    42              } catch (FileNotFoundException e) {
    43                  // if the file didn't exist, we wouldn't be here
    44              }
    45          } else {
    46              try {
    47                  return new URL(name).openConnection().getInputStream();
    48              } catch (Exception e) {
    49                  return loader.getResourceAsStream(name);
    50              }
    51          }
    52          throw new RuleSetNotFoundException("Can't find resource " + name + ". Make sure the resource is a valid file or URL or is on the CLASSPATH");
    53      }
    54  }