gpt4 book ai didi

java - 重复数组列表

转载 作者:行者123 更新时间:2023-12-02 11:49:59 24 4
gpt4 key购买 nike

我一直在进行一个简单的目录扫描,显示文本文件,然后将输出打印到文本区域。但出于某种原因,如果我尝试再次使用它,它会重复输出下面是公共(public)数组:

public ArrayList<File> getfile(File dir) {
File listFile[] = dir.listFiles();
if (listFile != null && listFile.length > 0) {
for (int i = 0; i < listFile.length; i++) {

if (listFile[i].isDirectory()) {
fileList.add(listFile[i]);
getfile(listFile[i]);

} else {
if (listFile[i].getName().endsWith(".txt")) {
fileList.add(listFile[i]);
}
}

}
}
return fileList;
}

这是 onclick 按钮代码

File root = new File(Environment.getExternalStorageDirectory() + File.separator + user_inputfilename); //"searches what the userinput"
getfile(root);
for (int i = 0; i < fileList.size(); i++) {
newText.append(fileList.get(i).getName()+"\n");
}

我真的不知道我做错了什么?有没有办法清除数组?任何帮助将不胜感激。谢谢

最佳答案

您似乎也在子目录中递归查找?无论如何,请尝试一下这个。您在哪里打电话 getFiles(dir)fileList = getTextFilesRecursively(dir)相反:

  public ArrayList<File> getTextFilesRecursively(File dir) {
return getTextFilesRecursively(dir, new ArrayList<>());
}

private ArrayList<File> getTextFilesRecursively(File dir, ArrayList<File> textFiles) {
File[] allFilesAndFoldersInDir = dir.listFiles();

if(textFiles == null) {
textFiles = new ArrayList<>();
}

if (allFilesAndFoldersInDir != null && allFilesAndFoldersInDir.length > 0) {
for (File fileOrFolderInDir : allFilesAndFoldersInDir) {
if (fileOrFolderInDir.isDirectory()) {
getTextFilesRecursively(fileOrFolderInDir, textFiles);
} else if (fileOrFolderInDir.getName().endsWith(".txt")) {
textFiles.add(fileOrFolderInDir);
}
}
}

return textFiles;
}

我相信您的根本问题是 fileList.add(listFile[i]);因为fileList范围在方法之外,并且正在被重用和附加。现在我们使用textFiles相反,每次首次调用该方法时它都应该为空。一个更简单的修复方法是 fileList = new ArrayList<>()在您调用 getFiles(dir); 之前,但是上面的代码要好得多。

关于java - 重复数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961866/

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