View Javadoc

1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd;
5   
6   import java.io.File;
7   import java.io.FileInputStream;
8   import java.io.IOException;
9   import java.io.InputStream;
10  
11  /**
12   * DataSource implementation to read data from a file.
13   */
14  public class FileDataSource implements DataSource {
15  	
16  	private static final String fileSeparator = System.getProperty("file.separator");
17  	
18      private File file;
19  
20      /**
21       * @param file the file to read
22       */
23      public FileDataSource(File file) {
24          this.file = file;
25      }
26  
27      public InputStream getInputStream() throws IOException {
28          return new FileInputStream(file);
29      }
30  
31      public String getNiceFileName(boolean shortNames, String inputFileName) {
32          return glomName(shortNames, inputFileName, file);
33      }
34  
35      private String glomName(boolean shortNames, String inputFileName, File file) {
36          if (shortNames && inputFileName.indexOf(',') == -1) {
37              if ((new File(inputFileName)).isDirectory()) {
38                  return trimAnyPathSep(file.getAbsolutePath().substring(inputFileName.length()));
39              } else {
40                  if (inputFileName.indexOf(fileSeparator.charAt(0)) == -1) {
41                      return inputFileName;
42                  }
43                  return trimAnyPathSep(inputFileName.substring(inputFileName.lastIndexOf(System.getProperty("file.separator"))));
44              }
45          } 
46  
47          try {
48              return file.getCanonicalFile().getAbsolutePath();
49          } catch (Exception e) {
50              return file.getAbsolutePath();
51          }
52      }
53  
54      private String trimAnyPathSep(String name) {
55  
56      	return name.startsWith(fileSeparator) ?
57              name.substring(1) :
58              name;
59      }
60  }