M
moerkstar
Gast
Hallo Leute,
ich hab jetzt mehrere Tage das gesamte Internet durchsucht, aber ich glaube Ihr könnt mir am besten helfen.
Mein Problem ist folgendes:
Ich habe diesen Code zum Filtern von Dateien in einem Verzeichnis. Ich möchte jetzt aber nicht anhand der Dateiendung filtern, sondern anhand von Zeichenketten innerhalb des Dateinamens (Also egal ob am Anfang, in der Mitte oder am Ende).
Irgendwie bin ich zu blöd dafür, aber ich weiß, dass Ihr mir helft. Lasst mich nicht im Stich!
ich hab jetzt mehrere Tage das gesamte Internet durchsucht, aber ich glaube Ihr könnt mir am besten helfen.
Mein Problem ist folgendes:
Ich habe diesen Code zum Filtern von Dateien in einem Verzeichnis. Ich möchte jetzt aber nicht anhand der Dateiendung filtern, sondern anhand von Zeichenketten innerhalb des Dateinamens (Also egal ob am Anfang, in der Mitte oder am Ende).
Irgendwie bin ich zu blöd dafür, aber ich weiß, dass Ihr mir helft. Lasst mich nicht im Stich!
Code:
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;
public class FileFinder
{
public static void main( String[] args )
{
String filter = args[0];
String path = new File( System.getProperty("user.dir") ).getParent();
System.out.println( "Looking in path: " + path );
FileFinder ff = new FileFinder();
List<File> files = ff.find( path, (".*"+filter+"*") );
System.out.printf( "Found %d file%s.%n",
files.size(), files.size() == 1 ? "" : "s" );
for ( File f : files )
System.out.println( f.getAbsolutePath() );
}
public List<File> find( String start, String extensionPattern )
{
final List<File> files = new ArrayList<File>( 1024 );
final Stack<File> dirs = new Stack<File>();
final File startdir = new File( start );
final Pattern p = Pattern.compile( extensionPattern, Pattern.CASE_INSENSITIVE );
if ( startdir.isDirectory() )
dirs.push( startdir );
while ( dirs.size() > 0 )
{
for ( File file : dirs.pop().listFiles() )
{
if ( file.isDirectory() )
dirs.push( file );
else
if ( p.matcher(file.getName()).matches() )
files.add( file );
}
}
return files;
}
}