我需要对文件列表应用更复杂的逻辑。具体来说,当应用软件更新时,我想对从更新 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 ...
}
前者可以让我显示进度(通过知道列表长度),但我认为更新几乎是瞬间完成的。
当然,文件可以返回某些子元素列表,所以超级幼稚的方法是:
/** 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>
的过程,因为这很不好。
find
命令完成的。 - Walter Tross