java复制文件排除子文件_Java复制除某些内部文件之外的文件夹

这里建议的其他选项都很好,但另一种选择是将多个更简单的FileFilter嵌套在一起(当然,这可能是矫枉过正的!)

public class FailFastFileFilter implements FileFilter {

protected final List children = new ArrayList();

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; // fail on the first reject

}

}

return true;

}

}

然后简单地为Sub3案例,.scl和.awl案例组合简短,简洁的FileFilters.我上面显示的示例FailFastFileFilter允许您将null指定为其中一个过滤器(因此您可以使用内联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"), // always exclude Sub3

(!Settings.getSiemensOptionAWL() ? new ExcludeExtensionInDirFileFilter("Sub1",".awl"), null), // Exclude Sub1/*.awl if desired

(!Settings.getSiemensOptionSCL() ? new ExcludeExtensionInDirFileFilter("Sub1",".scl"), null) // Exclude Sub1/*.scl if desired

);

FileUtils.copyDirectory(srcDir, dstDir, filters);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值