1
2
3
4 package net.sourceforge.pmd.util;
5
6 import java.io.File;
7 import java.io.FilenameFilter;
8 import java.io.IOException;
9 import java.util.ArrayList;
10 import java.util.Collections;
11 import java.util.Enumeration;
12 import java.util.List;
13 import java.util.regex.Matcher;
14 import java.util.regex.Pattern;
15 import java.util.zip.ZipEntry;
16 import java.util.zip.ZipFile;
17
18 import net.sourceforge.pmd.util.datasource.DataSource;
19 import net.sourceforge.pmd.util.datasource.FileDataSource;
20 import net.sourceforge.pmd.util.datasource.ZipDataSource;
21 import net.sourceforge.pmd.util.filter.AndFilter;
22 import net.sourceforge.pmd.util.filter.Filter;
23 import net.sourceforge.pmd.util.filter.Filters;
24 import net.sourceforge.pmd.util.filter.OrFilter;
25
26
27
28
29 public final class FileUtil {
30
31 private FileUtil() {}
32
33
34
35
36
37
38 public static String getFileNameWithoutExtension(String fileName) {
39 String name = fileName;
40
41 int index = fileName.lastIndexOf('.');
42 if (index != -1) {
43 name = fileName.substring(0, index);
44 }
45
46 return name;
47 }
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public static List<DataSource> collectFiles(String fileLocations, FilenameFilter filenameFilter) {
62 List<DataSource> dataSources = new ArrayList<DataSource>();
63 for (String fileLocation : fileLocations.split(",")) {
64 collect(dataSources, fileLocation, filenameFilter);
65 }
66 return dataSources;
67 }
68
69 private static List<DataSource> collect(List<DataSource> dataSources, String fileLocation,
70 FilenameFilter filenameFilter) {
71 File file = new File(fileLocation);
72 if (!file.exists()) {
73 throw new RuntimeException("File " + file.getName() + " doesn't exist");
74 }
75 if (!file.isDirectory()) {
76 if (fileLocation.endsWith(".zip") || fileLocation.endsWith(".jar")) {
77 ZipFile zipFile;
78 try {
79 zipFile = new ZipFile(fileLocation);
80 Enumeration<? extends ZipEntry> e = zipFile.entries();
81 while (e.hasMoreElements()) {
82 ZipEntry zipEntry = e.nextElement();
83 if (filenameFilter.accept(null, zipEntry.getName())) {
84 dataSources.add(new ZipDataSource(zipFile, zipEntry));
85 }
86 }
87 } catch (IOException ze) {
88 throw new RuntimeException("Archive file " + file.getName() + " can't be opened");
89 }
90 } else {
91 dataSources.add(new FileDataSource(file));
92 }
93 } else {
94
95
96 Filter<File> filter = new OrFilter<File>(Filters.toFileFilter(filenameFilter), new AndFilter<File>(Filters
97 .getDirectoryFilter(), Filters.toNormalizedFileFilter(Filters.buildRegexFilterExcludeOverInclude(
98 null, Collections.singletonList("SCCS")))));
99 FileFinder finder = new FileFinder();
100 List<File> files = finder.findFilesFrom(file.getAbsolutePath(), Filters.toFilenameFilter(filter), true);
101 for (File f : files) {
102 dataSources.add(new FileDataSource(f));
103 }
104 }
105 return dataSources;
106 }
107
108
109
110
111
112
113
114
115
116 public static boolean findPatternInFile( final File file, final String pattern ) {
117
118 Pattern regexp = Pattern.compile(pattern);
119 Matcher matcher = regexp.matcher("");
120
121 FileIterable it = new FileIterable(file);
122 for ( String line : it ){
123 matcher.reset( line );
124 if ( matcher.find() )
125 return true;
126 }
127 return false;
128 }
129 }