gpt4 book ai didi

java - 递归文件列表检查返回重复项

转载 作者:行者123 更新时间:2023-11-30 08:58:52 25 4
gpt4 key购买 nike

我已经制作了这个方法,它遍历并找到给定目录中的每个文件,然后检查它是否满足 FileFilter 的要求,并返回数组列表中的所有文件。

public static ArrayList<File> listFiles(File dir, FileFilter filter) {
ArrayList<File> files = new ArrayList<File>();
if (filter == null)
files = listFiles(dir, files);
else
files = listFiles(dir, filter, files);
return files;
}

private static ArrayList<File> listFiles(File dir, ArrayList<File> files, FileFilter filter) {
if (!dir.isDirectory() || !dir.exists())
return null;
for (File file : dir.listFiles()) {
System.out.println(file);
if (filter.accept(file))
files.add(file);
listFiles(file, filter, files);
}
return files;
}

但由于某种原因,它不止一次返回一些文件......

(这是对 top 方法的调用,然后调用 bottom 方法,我不会发布没有 fileFilter 的版本,因为它以完全相同的方式失败。如果你想知道区别,那就忽略'if (filter.accept(file))' 语句。

ArrayList<File> files = listFiles(new File("Notes"), new DirectoryFilter());

当我传递上述参数时,我得到这个作为返回

Notes/JavaNotes
Notes/JavaNotes/java
Notes/JavaNotes/java/io
Notes/JavaNotes/java/io/File
Notes/JavaNotes/java/io/IOException
Notes/JavaNotes/java/util
Notes/JavaNotes/java/util/ArrayList
Notes/JavaNotes/javax
Notes/JavaNotes/javax/swing
Notes/JavaNotes/javax/swing/JFrame
Notes/JavaNotes
Notes/JavaNotes/java
Notes/JavaNotes/java/io
Notes/JavaNotes/java/io/File

最后四个文件是前四个文件的副本。不出所料,它也失败了,只有前 4 行文件被添加了两次(因此,如果在该目录结束之前一行中只有 2 个文件,那么只会复制 2 个文件)。

directoryFilter 是结果中没有实际 .txt 文件的原因。

最佳答案

您的代码对我有用(在修复错误和一些清理之后)。

import java.io.*;
import java.util.*;

public class FileTree {
public static void main(String[] args) {
System.err.println(listFiles(new File(args[0]), new FileFilter() {
@Override public boolean accept(File pathname) {
return true;
}
}));
}

public static ArrayList<File> listFiles(File dir, FileFilter filter) {
ArrayList<File> files = new ArrayList<File>();
listFiles(dir, files, filter);
return files;
}

private static void listFiles(File dir, ArrayList<File> files, FileFilter filter) {
if (!dir.isDirectory()) {
return;
}
for (File file : dir.listFiles()) {
if (filter.accept(file)) {
files.add(file);
}
listFiles(file, files, filter);
}
}
}

关于java - 递归文件列表检查返回重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27465478/

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