diff options
author | Phil Burk <[email protected]> | 2014-12-30 16:53:03 -0800 |
---|---|---|
committer | Phil Burk <[email protected]> | 2014-12-30 16:53:03 -0800 |
commit | 534969d42ca5168d645678345cd21242fe41f389 (patch) | |
tree | e8f5d1cba1ec57685e76ceb923d8da25a7846cfb /src/com/softsynth/util/FileSearch.java | |
parent | a4d8ca95178d2e3acfc3299a4b73e84c2646d24e (diff) |
Initial commit of code.
Diffstat (limited to 'src/com/softsynth/util/FileSearch.java')
-rw-r--r-- | src/com/softsynth/util/FileSearch.java | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/src/com/softsynth/util/FileSearch.java b/src/com/softsynth/util/FileSearch.java new file mode 100644 index 0000000..f691728 --- /dev/null +++ b/src/com/softsynth/util/FileSearch.java @@ -0,0 +1,193 @@ +/* + * Copyright 1999 Phil Burk, Mobileer Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.softsynth.util; + +import java.io.File; +import java.io.FilenameFilter; +import java.util.Enumeration; +import java.util.Vector; + +class WildcardFilenameFilter implements FilenameFilter { + String pattern; + + public WildcardFilenameFilter(String pattern) { + this.pattern = pattern; + } + + /* abc*frog*xyz =?= abctreefroglegxyz */ + static boolean wildMatch(String pattern, String candidate) { + int starPos = pattern.indexOf('*'); + // System.out.println("------pattern = " + pattern + ", candidate = " + candidate + + // ", starPos = " + starPos ); + if (starPos < 0) + return (pattern.equalsIgnoreCase(candidate)); + else if (starPos > 0) { + // System.out.println("------ beginning, pattern = " + pattern + ", candidate = " + + // candidate ); + if (pattern.regionMatches(true, 0, candidate, 0, starPos)) { + /* Recursively check remainder of string. */ + return wildMatch(pattern.substring(starPos), candidate.substring(starPos)); + } + return false; + } else { + /* Compare remainder of string. */ + // System.out.println("------ remainder, pattern = " + pattern + ", candidate = " + + // candidate ); + if (pattern.regionMatches(true, 1, candidate, 0, candidate.length())) + return true; + + for (int i = 0; i < candidate.length(); i++) { + if (wildMatch(pattern.substring(1), candidate.substring(i))) + return true; + } + } + return false; + } + + @Override + public boolean accept(File dir, String name) { + return wildMatch(pattern, name); + } +} + +/** + * Wildcard search for files in directory. + * + * @author Phil Burk (C) 1999 SoftSynth.com + */ + +public class FileSearch { + /** + * Expand vector of filenames that may contain wildcards into a new vector of filenames without + * wildcards. + */ + public static Vector expandFilenames(Vector filenames) { + Vector expandedFilenames = new Vector(); + Enumeration e = filenames.elements(); + while (e.hasMoreElements()) { + expandFilename((String) e.nextElement(), expandedFilenames); + } + return expandedFilenames; + } + + /** + * Expand filename that may contain wildcards and add to a vector of filenames without + * wildcards. + */ + public static void expandFilename(String filename, Vector expandedFilenames) { + int lastSepPos = filename.lastIndexOf(File.separatorChar); + + // System.out.println("expandFilename: separator = " + File.separatorChar + " , index = " + + // lastSepPos ); + + int starPos = filename.indexOf('*'); + if (starPos < 0) { + expandedFilenames.addElement(filename); + } else if (starPos < lastSepPos) { + TextOutput.error("Wildcard * not allowed in directory names! " + filename); + } else { + String parent; + String wildFile; + if (lastSepPos < 0) { + parent = "."; + wildFile = filename; + } else { + parent = filename.substring(0, lastSepPos); + wildFile = filename.substring(lastSepPos + 1); + } + + File dir = new File(parent); + // System.out.println("expandFilename: parent = " + parent + " , dir = " + dir ); + if (!dir.exists()) { + TextOutput.error("Invalid directory = " + parent); + } + + String[] files = dir.list(new WildcardFilenameFilter(wildFile)); + if (files == null) + return; + for (int i = 0; i < files.length; i++) { + expandedFilenames.addElement(parent + File.separatorChar + files[i]); + } + } + } + + /** + * Extract file name from full pathname. For example, if pathname is "/usr/data/report.txt" then + * the output will be "report.txt". + */ + public static String removeParent(String pathName) { + int lastSepPos = pathName.lastIndexOf(File.separatorChar); + if (lastSepPos < 0) { + return pathName; + } else { + return pathName.substring(lastSepPos + 1); + } + } + + /** + * Remove any dot extension from file name. For example, if pathname is "/usr/data/report.txt" + * then the output will be "/usr/data/report". + */ + public static String removeExtension(String pathName) { + int lastDotPos = pathName.lastIndexOf('.'); + if (lastDotPos > 0) { + return pathName.substring(0, lastDotPos); + } else { + return pathName; + } + } + + public static void main(String args[]) { + System.out.println("FileSearch - by Phil Burk"); + boolean result; + result = WildcardFilenameFilter.wildMatch("abc*frog*xyz", "abctreefroglegxyz"); + System.out.println("result = " + result); + result = WildcardFilenameFilter.wildMatch("abc*frog*xyz", "abctreefrxglegxyz"); + System.out.println("result = " + result); + + test(); + } + + static void test() { + Vector expandedFilenames = new Vector(); + expandFilename("../data/ov*.mid", expandedFilenames); + Enumeration e = expandedFilenames.elements(); + while (e.hasMoreElements()) { + String name = (String) e.nextElement(); + System.out.println("file = " + name); + } + } + + /******************************************************** + * Create directory if it doesn't exist. + */ + public static void createDirectoryIfNeeded(String directoryName) throws SecurityException { + createDirectoryIfNeeded(new File(directoryName)); + } + + /******************************************************** + * Create directory with the given name if it doesn't exist. + */ + public static void createDirectoryIfNeeded(File dir) throws SecurityException { + if (!dir.isDirectory()) { + if (!dir.mkdirs()) { + TextOutput.error("Could not make output directory " + dir.getAbsolutePath()); + } + } + } + +} |