The other options offered here are good, however another alternative is to combine several simple FileFilters together (which may be unnecessary, of course!)
public class FailFastFileFilter implements FileFilter {
protected final List<FileFilter> children = new ArrayList<FileFilter>();
public FailFastFileFilter(FileFilter... filters) {
for (FileFilter filter: filters) {
if (filter != null)
this.filters.add(filter);
}
}
public boolean accept(File pathname) {
for (FileFilter filter: this.filters) {
if (!filter.accept(pathname)) {
return false;
}
}
return true;
}
}
, FileFilters Sub3,.scl case.awl. FailFastFileFilter, , null ( inline if , FileFilters)
, Sub1 Sub3.
:
public class ExcludeExtensionInDirFileFilter implements FileFilter {
protected final String parentFolder;
protected final String extension;
public ExtensionFileFilter(String parentFolder, String extension) {
this.parentFolder = parentFolder;
this.extension = extension.toLowerCase();
}
public boolean accept(File file) {
if (!file.isDirectory() && file.getParentFile().getName().equalsIgnoreCase(parentFolder))
return !file.getAbsolutePath().toLowerCase().endsWith(extension);
else
return true;
}
}
, :
public class ExcludeDirFileFilter implements FileFilter {
protected final String name;
public ExcludeDirFileFilter(String name) {
this.name = name.toLowerCase();
}
public boolean accept(File file) {
if (file.isDirectory() && file.getName().equalsIgnoreCase(name))
return false;
else
return true;
}
}
FailFastFileFilter :
FileFilter filters = new FailFastFileFilter(
new ExcludeDirFileFilter("Sub3"),
(!Settings.getSiemensOptionAWL() ? new ExcludeExtensionInDirFileFilter("Sub1",".awl"), null),
(!Settings.getSiemensOptionSCL() ? new ExcludeExtensionInDirFileFilter("Sub1",".scl"), null)
);
FileUtils.copyDirectory(srcDir, dstDir, filters);