/*********************************************************************** * * Copyright (c) 2006 Manuel Traut and Volker Dahnke * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: Manuel Traut and Volker Dahnke * ***********************************************************************/ package YalpServer; import java.io.*; import java.util.*; /************************************************************************ * * Class FileFinder * * algorithm for scanning files recursively * * @author Volker Dahnke / Manuel Traut * * @version 0.6 14-12-2005
* * @see FileBrowser * ************************************************************************/ public class FileFinder { private ArrayList files; /** * Constructor: scans subdirectories of commited directory * uses only files with allowed extensions * @param start * directory to scan * @param extensions * allowed extensions */ public FileFinder( String start, String extensions[] ) { this.files = new ArrayList(); Stack dirs = new Stack(); File startdir = new File(start); // push startdir to stack if (startdir.isDirectory()) dirs.push(startdir); // startdir is File else { if (match(startdir.getName(), extensions)) this.files.add(startdir); return; } // for each dir on stack while (dirs.size() > 0) { // contents of dir on stack for (File file : dirs.pop().listFiles()){ try { // add subdirectory to stack if (file.isDirectory()) dirs.push(file); // if file is of correct filetype add it to filelist else if (match(file.getName(), extensions)) this.files.add(file); } catch (NullPointerException e) { System.out.println("FileFinder: "+ file.getName() +"Premission denied"); } } } } /** * returns and prints out all Medias found * @return ArrayList * all found Medias */ public ArrayList getFiles(){ print(); return this.files; } /** * prints out found medias * */ public void print() { System.out.println( "Found " + files.size() + " file" + (files.size() == 1 ? "." : "s.") ); for ( File f : files ) System.out.println( f.getAbsolutePath() ); } /** * checks if file extension matches or not * * @param s * file to check * @param suffixes * allowed extensions * * @return boolean: true if it's a media, yalp can handle */ private static boolean match( String s, String suffixes[] ) { for ( String suffix : suffixes ) { int huhu = s.length(); int huhu2 = suffix.length(); int huhu3 = huhu - huhu2; if ( s.length() >= suffix.length() && s.substring(huhu3, s.length()).equalsIgnoreCase(suffix) ) return true; } return false; } }