java 子目录文件内容_java-对目录和子目录中的每个文件执行操作

我需要对文件列表应用更复杂的逻辑.具体来说,在应用软件更新时,我想对从更新zip归档文件中获取的文件执行此操作:

>让updateFile为更新档案中的文件,originalFile为当前版本文件,backupFile为原始文件的备份

>如果originalFile与当前运行的jar文件相同,请跳过它

>如果updateFile的父目录是特定名称,请跳过它(例如,包含用户数据的目录)

我希望有一些选项,例如为每个文件运行回调:

GreatFileLibrary.forEveryChildOf(new File("my path"),

(File child)->{ ... logic here ... });

如果不是这样,那么至少只需获取某个Collection中的所有文件并循环遍历即可:

Iterable files = GreatFileLibrary.listChildren(new File("my path"));

for(File child:files) {

... logic ...

}

前者可以让我显示进度(由于知道列表的长度),但是我坦率地认为更新几乎是即时的.

文件当然可以返回一些子列表,因此,超级幼稚的方法是:

/** Returns list of all child files, recursively. **/

public static Iterable listFileChildren(File parent, ArrayList list) {

File[] files = parent.listFiles();

for(File file:files) {

list.add(file);

if(file.isDirectory())

listFileChildren(file, list);

}

return list;

}

public static Iterable listFileChildren(File parent) {

return listFileChildren(parent, new ArrayList());

}

内置的Java 8库可以做得更好吗?我的快速代码是否有缺陷?我真的很希望删除将File []转换为Iterable< File>的过程.就像我的代码一样,这很脏.

解决方法:

在代码中创建列表将最耗时,因此请尝试避免使用它.

一个简单的方法是:

public void forEveryChildOf(File file) {

for(File child:file.listFiles())

doForEach(file,child);

}

private void doForEach(File topParent,File child){

if(child.isFile())

System.out.println("Do logic");

if(child.isDirectory())

for(File subchild:child.listFiles())

doForEach(topParent,subchild);

}

标签:file,java

来源: https://codeday.me/bug/20191119/2034255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值