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 }