public static void glob(String filePattern, Set<File> fileSet) throws IOException { final File patternFile = new File(filePattern); if (patternFile.exists()) { fileSet.add(patternFile.getCanonicalFile()); return; } boolean windowsOs = isWindowsOs(); String[] patternSplit = splitBasePath(filePattern, windowsOs); String basePath = patternSplit[0]; String patternPath = patternSplit[1]; if (patternPath.isEmpty()) { // no pattern given, but no file exist return; } File canonicalBaseFile = new File(basePath).getCanonicalFile(); String newpattern = canonicalBaseFile.getPath() + "/" + patternPath; WildcardMatcher matcher = new WildcardMatcher(newpattern); HashSet<File> visitedDirs = new HashSet<>(); collectFiles(matcher, canonicalBaseFile, fileSet, visitedDirs); }
private AutoGroupingImpl(String[][] paths) { this.paths = paths.clone(); this.indexes = new Index[paths.length]; this.wildcardMap = new HashMap<>(); for (int i = 0; i < paths.length; i++) { String[] path = paths[i]; String entry = path.length > 0 ? path[0] : ""; indexes[i] = new Index(entry, i); for (String pathEntry : path) { if (pathEntry.contains("*") || pathEntry.contains("?")) { wildcardMap.put(pathEntry, new WildcardMatcher(pathEntry)); } } } Arrays.sort(indexes, new Comparator<Index>() { @Override public int compare(Index o1, Index o2) { if (o1.entry.length() != o2.entry.length()) { return o2.entry.length() - o1.entry.length(); } return o2.entry.compareTo(o1.entry); } }); }
@Test public void testMatchesAntExamplePattern2() throws Exception { WildcardMatcher m = new WildcardMatcher("org/apache/jakarta/**"); assertEquals("org/apache/jakarta(/.*)?", m.getRegex()); assertTrue(m.matches("org/apache/jakarta/tools/ant/docs/index.html")); assertTrue(m.matches("org/apache/jakarta/test.xml")); assertFalse(m.matches("org/apache/xyz.java")); }
@Test public void testMatchesAntExamplePattern3() throws Exception { WildcardMatcher m = new WildcardMatcher("org/apache/**/CVS/*"); assertEquals(m.isWindowsFs() ? "org/apache((/.*/)?|/)cvs/[^/:]*" : "org/apache((/.*/)?|/)CVS/[^/:]*", m.getRegex()); assertTrue(m.matches("org/apache/CVS/Entries")); assertTrue(m.matches("org/apache/jakarta/tools/ant/CVS/Entries")); assertFalse(m.matches("org/apache/CVS/foo/bar/Entries")); }
@Test public void testMatchesQuoteInFilename() throws Exception { WildcardMatcher m = new WildcardMatcher("te?t.N1"); assertEquals(m.isWindowsFs() ? "te.t\\.n1" : "te.t\\.N1", m.getRegex()); assertTrue(m.matches("test.N1")); assertTrue(m.matches("te?t.N1")); assertFalse(m.matches("tet.N1")); }
@Test public void testMatchesMultiDirectoryNoWildcardUsed_Unix() throws Exception { WildcardMatcher m = new WildcardMatcher("/home/norman/meris/data.nc", false); assertEquals("/home/norman/meris/data\\.nc", m.getRegex()); assertTrue(m.matches("/home/norman/meris/data.nc")); assertFalse(m.matches("home/norman/meris/data.nc")); assertFalse(m.matches("/home/norman/MERIS/data.nc")); assertFalse(m.matches("/home/norman/meris/data.NC")); }
@Test public void testMatchesStarInBetween() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/*/test.txt"); assertEquals("foo/[^/:]*/test\\.txt", m.getRegex()); assertTrue(m.matches("foo//test.txt")); assertTrue(m.matches("foo/bar/test.txt")); assertFalse(m.matches("/foo/test.txt")); assertFalse(m.matches("foo/bar/doz/gna/test.txt")); }
@Test public void testMatchesSingleFileNoWildcardUsed() throws Exception { WildcardMatcher m = new WildcardMatcher("test.N1"); assertEquals(m.isWindowsFs() ? "test\\.n1" : "test\\.N1", m.getRegex()); assertTrue(m.matches("test.N1")); assertFalse(m.matches("test.jpg")); assertFalse(m.matches("rest.N1")); assertFalse(m.matches("x/test.N1")); }
@Test public void testMatchesAntExamplePattern1() throws Exception { WildcardMatcher m = new WildcardMatcher("**/CVS/*"); assertEquals(m.isWindowsFs() ? "(.*/)?cvs/[^/:]*" : "(.*/)?CVS/[^/:]*", m.getRegex()); assertTrue(m.matches("CVS/Repository")); assertTrue(m.matches("org/apache/CVS/Entries")); assertTrue(m.matches("org/apache/jakarta/tools/ant/CVS/Entries")); assertFalse(m.matches("org/apache/CVS/foo/bar/Entries")); }
@Test public void testMatchesAntExamplePattern4() throws Exception { WildcardMatcher m = new WildcardMatcher("**/test/**"); assertEquals("(.*/)?test(/.*)?", m.getRegex()); assertTrue(m.matches("test")); assertTrue(m.matches("test/java")); assertTrue(m.matches("src/test/java")); assertTrue(m.matches("src/test")); assertFalse(m.matches("src/main/java")); }
@Test public void testMatchesStarInFilename() throws Exception { WildcardMatcher m = new WildcardMatcher("*.N1"); assertEquals(m.isWindowsFs() ? "[^/:]*\\.n1" : "[^/:]*\\.N1", m.getRegex()); assertTrue(m.matches("test.N1")); assertTrue(m.matches("MER_RR.N1")); assertFalse(m.matches("MER_RR")); assertFalse(m.matches("MER_RR.txt")); assertFalse(m.matches("data/MER_RR.N1")); }
@Test public void testMatchesDoubleStarInBetween() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/**/test.txt"); assertEquals("foo((/.*/)?|/)test\\.txt", m.getRegex()); assertTrue(m.matches("foo/test.txt")); assertTrue(m.matches("foo/bar/test.txt")); assertTrue(m.matches("foo/bar/doz/test.txt")); assertTrue(m.matches("foo/bar/doz/gna/test.txt")); assertFalse(m.matches("/foo/test.txt")); assertFalse(m.matches("foo/bar/doz/gna/test.zip")); }
@Test public void testMatchesStarAtEnd() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/*"); assertEquals("foo/[^/:]*", m.getRegex()); assertTrue(m.matches("foo/test.txt")); assertTrue(m.matches("foo/bar")); assertFalse(m.matches("foo")); assertFalse(m.matches("foo/bar/test.txt")); assertFalse(m.matches("/foo/")); assertFalse(m.matches("foo/bar/")); assertFalse(m.matches("foo/bar/doz/gna/test.txt")); }
@Test public void testMatchesMultiDirectoryNoWildcardUsed_Win() throws Exception { WildcardMatcher m = new WildcardMatcher("C:\\Users\\Norman\\MERIS\\data.nc", true); assertEquals("c:/users/norman/meris/data\\.nc", m.getRegex()); assertTrue(m.matches("C:\\Users\\Norman\\MERIS\\data.nc")); assertTrue(m.matches("C:\\Users\\Norman\\meris\\data.nc")); assertTrue(m.matches("C:\\Users\\Norman\\meris\\data.NC")); assertTrue(m.matches("c:\\Users\\Norman\\meris\\data.nc")); assertTrue(m.matches("C:/Users/Norman/MERIS/data.nc")); assertTrue(m.matches("C:/Users/Norman/meris/data.nc")); assertTrue(m.matches("C:/Users/Norman/meris/data.NC")); assertTrue(m.matches("c:/Users/Norman/meris/data.nc")); assertFalse(m.matches("D:\\Users\\Norman\\MERIS\\data.nc")); assertFalse(m.matches("\\Users\\Norman\\MERIS\\data.nc")); }
@Test public void testMatchesDoubleStarAtEnd() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/**"); assertEquals("foo(/.*)?", m.getRegex()); assertTrue(m.matches("foo")); assertTrue(m.matches("foo/")); assertTrue(m.matches("foo/bar/doz/test.txt")); assertTrue(m.matches("foo/bar/doz/gna/test.txt")); assertTrue(m.matches("foo/test.txt")); assertTrue(m.matches("foo/bar/doz/gna/test.zip")); if (m.isWindowsFs()) { assertTrue(m.matches("foo\\bar\\doz\\gna\\test.txt")); } assertFalse(m.matches("/foo/bar/doz/gna/test.zip")); assertFalse(m.matches("bar/doz/gna/test.zip")); }