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

com.softicar.platform.common.io.file.FileFinder Maven / Gradle / Ivy

Go to download

The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.

There is a newer version: 50.0.0
Show newest version
package com.softicar.platform.common.io.file;

import com.softicar.platform.common.core.logging.Log;
import com.softicar.platform.common.core.logging.StatisticLog;
import java.io.File;
import java.io.FileFilter;
import java.util.Collection;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * A file finder that searches for files recursively.
 *
 * @author Oliver Richers
 */
public class FileFinder {

	/**
	 * Collects all files in the specified folders that satisfy the specified
	 * filter.
	 *
	 * @param folders
	 *            collection of folder names to scan
	 * @param filter
	 *            a java file filter object, deciding which files to return
	 * @return a sorted map, that maps from the filename (without path) to the
	 *         associated file object
	 */
	public static SortedMap collectFiles(Collection folders, FileFilter filter) {

		SortedMap filemap = new TreeMap<>();
		StatisticLog.start("Collecting files");
		for (String folder: folders) {
			addFilesRecursively(new File(folder), filter, filemap);
		}
		StatisticLog.stop("Collecting files");
		return filemap;
	}

	/**
	 * This function is equivalent to collectFiles(Collection folders,
	 * FileFilter filter) except that this function takes only one folder name.
	 *
	 * @see #collectFiles(Collection folders, FileFilter filter)
	 */
	public static SortedMap collectFiles(String dirname, FileFilter filter) {

		SortedMap filemap = new TreeMap<>();
		StatisticLog.start("Collecting files");
		addFilesRecursively(new File(dirname), filter, filemap);
		StatisticLog.stop("Collecting files");
		return filemap;
	}

	private static void addFilesRecursively(File file, FileFilter filter, Map filemap) {

		if (file.isDirectory()) {
			Log.verbose("Entering directory " + file.getPath());
			File[] files = file.listFiles();
			for (int i = 0; i != files.length; ++i) {
				addFilesRecursively(files[i], filter, filemap);
			}
		} else if (filter.accept(file)) {
			filemap.put(file.getName().toUpperCase(), file);
			StatisticLog.inc("Collecting files");
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy