gpt4 book ai didi

java - 对目录和子目录中的每个文件做一些事情

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:08 26 4
gpt4 key购买 nike

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

  • updateFile是来自更新存档的文件,originalFile当前版本文件和backupFile原文件备份
  • 如果originalFile与当前运行的相同jar文件,跳过它
  • 如果updateFile的父目录是特定的名字,跳过它(例如,有用户数据的目录)

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

GreatFileLibrary.forEveryChildOf(new File("my path"), 
(File child)->{ ... logic here ... });

如果不是这样,那么至少只获取一些 Collection 中的所有文件并循环遍历它:

Iterable<File> files = GreatFileLibrary.listChildren(new File("my path"));
for(File child:files) {
... logic ...
}

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

当然文件可以返回一些 child 的列表,所以 super 天真的方法是:

  /** Returns list of all child files, recursively. **/
public static Iterable<File> listFileChildren(File parent, ArrayList<File> list) {
File[] files = parent.listFiles();
for(File file:files) {
list.add(file);
if(file.isDirectory())
listFileChildren(file, list);
}
return list;
}
public static Iterable<File> 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);
}

关于java - 对目录和子目录中的每个文件做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com