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
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
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 }