All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.esotericsoftware.wildcard.RegexScanner Maven / Gradle / Ivy

There is a newer version: 5.8.4
Show newest version
package com.esotericsoftware.wildcard;



import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;

/**
* 

* Code Source *

* *

* This is external code that was copied into the CedarCommon codebase under * the terms of its license. *

* *
* * * * * * * * * * * *
Source:Wildcard
Date:April, 2014
*
*/ class RegexScanner { private final File rootDir; private final List includePatterns; private final List matches = new ArrayList(128); public RegexScanner (File rootDir, List includes, List excludes) { if (rootDir == null) throw new IllegalArgumentException("rootDir cannot be null."); if (!rootDir.exists()) throw new IllegalArgumentException("Directory does not exist: " + rootDir); if (!rootDir.isDirectory()) throw new IllegalArgumentException("File must be a directory: " + rootDir); try { rootDir = rootDir.getCanonicalFile(); } catch (IOException ex) { throw new RuntimeException("OS error determining canonical path: " + rootDir, ex); } this.rootDir = rootDir; if (includes == null) throw new IllegalArgumentException("includes cannot be null."); if (excludes == null) throw new IllegalArgumentException("excludes cannot be null."); includePatterns = new ArrayList(); for (String include : includes) includePatterns.add(Pattern.compile(include, Pattern.CASE_INSENSITIVE)); List excludePatterns = new ArrayList(); for (String exclude : excludes) excludePatterns.add(Pattern.compile(exclude, Pattern.CASE_INSENSITIVE)); scanDir(rootDir); for (Iterator matchIter = matches.iterator(); matchIter.hasNext();) { String filePath = (String)matchIter.next(); for (Pattern exclude : excludePatterns) if (exclude.matcher(filePath).matches()) matchIter.remove(); } } private void scanDir (File dir) { for (File file : dir.listFiles()) { for (Pattern include : includePatterns) { String filePath = file.getPath().substring(rootDir.getPath().length() + 1); if (include.matcher(filePath).matches()) { matches.add(filePath); break; } } if (file.isDirectory()) scanDir(file); } } public List matches () { return matches; } public File rootDir () { return rootDir; } public static void main (String[] args) { // System.out.println(new Paths("C:\\Java\\ls", "**")); List includes = new ArrayList(); includes.add("core[^T]+php"); // includes.add(".*/lavaserver/.*"); List excludes = new ArrayList(); // excludes.add("website/**/doc**"); long start = System.nanoTime(); List files = new RegexScanner(new File("..\\website\\includes"), includes, excludes).matches(); long end = System.nanoTime(); System.out.println(files.toString().replaceAll(", ", "\n").replaceAll("[\\[\\]]", "")); System.out.println((end - start) / 1000000f); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy