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

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

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;

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